首页 > 解决方案 > 如何通过 shell 脚本创建显示所有目录的命令?

问题描述

我想创建一个命令,显示作为参数给出的目录中的所有目录。例如,如果我们的文件层次结构是这样的:

dir1:
    dir2
    dir3
    file1
    dir4:
        file2
        dir5

然后结果rep dir1应该显示:

dir2
dir3
dir4

rep dir1/dir4应该显示:

dir5

目前我有一个shell脚本rep.sh执行以下操作:

function rep(){
    all=`ls $1`
    for each in $all
    do 
        if [ -d $each ]
        then
            echo $each
        fi
    done
}

通过执行此脚本bash rep.sh不会执行任何操作,我认为这是正确的,但是当我执行此操作时rep dir1rep dir1/dir4它不会显示任何内容。我认为我的错误在于我没有正确使用函数环境,或者我没有正确传递参数。

标签: shelldirectorycommandshcommand-line-arguments

解决方案


你可以使用findand basename

...
find "$1" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;
...

选项-mindepth 1-maxdepth 1防止列出基本目录或下降到子目录。-type d应用过滤器,以便仅列出目录并为找到的项目-exec basename {} \;执行basenamebasename剥离路径,以便仅打印目录名称本身。


推荐阅读