循环遍历目录以回显其内容

时间:2010-07-17 13:57:32

标签: bash

目录是设置为完整路径的变量

for e in "$DIR_0" "$DIR_1" "$DIR_2"
do
    for i in $e/*
    do
        echo $i
    done

每行的输出是完整路径。我只想要每个文件的名称

5 个答案:

答案 0 :(得分:2)

您正在寻找basename

答案 1 :(得分:2)

这是Bash相当于basename

echo "${i##*/}"

它删除了所有内容,包括最后一个斜杠。

答案 2 :(得分:0)

如果你真的不想递归,你可以用这个find命令更简洁地​​实现:

find "$DIR_0" "$DIR_1" "$DIR_2" -type f -maxdepth 1 -exec basename{} \;

如果您希望递归子目录,只需省略maxdepth:

find "$DIR_0" "$DIR_1" "$DIR_2" -type f  -exec basename{} \;

答案 3 :(得分:0)

使用bash

以递归方式移动目录

试试这个你可以找到它here

#! /bin/bash


    indent_print()
    {
        for((i=0; i < $1; i++)); do
        echo -ne "\t"
        done
        echo "$2"
    }

    walk_tree()
    {
        local oldifs bn lev pr pmat
        if [[ $# -lt 3 ]]; then
        if [[ $# -lt 2 ]]; then
            pmat=".*"
        else
            pmat="$2"
        fi
        walk_tree "$1" "$pmat" 0
        return
        fi
        lev=$3
        [ -d "$1" ] || return
        oldifs=$IFS
        IFS=""
        for el in $1/ *; do
        bn=$(basename "$el")
        if [[ -d "$el" ]]; then
            indent_print $lev "$bn/"
            pr=$( walk_tree "$el" "$2" $(( lev + 1)) )
            echo "$pr"
        else
            if [[ "$bn" =~ $2 ]]; then
            indent_print $lev "$bn"
            fi
        fi
        done
        IFS=$oldifs
    }

    walk_tree "$1" "\.sh$"

答案 4 :(得分:0)

另请参阅POSIX兼容的Bash函数以替换basename&amp; dirname在这里:

http://cfaj.freeshell.org/src/scripts/

相关问题