我有一个类似
的程序#!bin/bash
cd $1
tree $1
我跑的地方:
myprogram.sh subdir1
其中subdir1
是dir
的子目录,但我在subdir1, subdir2, subdir3... subdirN
内有dir
。
如何告诉我的程序在dir
的每个子目录上运行?显然,我的程序不只是运行tree
,而只是表示我通过命令行传递一个子目录,我的程序使用子目录名称来处理一大堆进程。
由于
答案 0 :(得分:1)
使用find
。例如,find $1 -type d
将返回$1
下所有目录的列表,并根据需要进行递归。
您可以在脚本之前使用xargs
或exec
:
find DIR -type d -print0 | xargs -0 -n1 thescript.sh
或
find DIR -type d -exec thescript.sh {} \;
以上两种方法对于奇怪命名的目录都是安全的。
如果您想在脚本中使用find
且没有目录名称包含换行符,请尝试:
#!/bin/bash
find "$1" -type d| IFS='' while read d; do
pushd "$d" #like cd, but remembers where you came from
tree "$d"; #<-- your code here
popd #go back to starting point
done
如果您只想要起点的直接子目录,请尝试在参数列表中将-depth 1
添加到上述示例中的find
。