我知道如何遍历目录中的所有文件,例如:
for i in *
do
<some command>
done
但是我想浏览目录中的所有文件,包括(尤其是!)子目录中的所有文件。有没有简单的方法可以做到这一点?
答案 0 :(得分:2)
find
和xargs
是递归处理目录和子目录内容的出色工具。例如
find . -type f -print0 | xargs -0 command
将对当前目录及其子目录中的一批文件运行command
。 -print0
和-0
参数避免了包含空格,引号或其他元字符的文件名的常见问题。
如果command
仅接受一个参数,则可以使用-L1
限制传递给它的文件数。
find . -type f -print0 | xargs -0 -L1 command
并且正如alexgirao所建议的,xargs
也可以使用-I
来命名参数,如果command
带有选项,则可以提供一些灵活性。 -I
暗示-L1
。
find . -type f -print0 | xargs -0 -Iarg command arg --option
答案 1 :(得分:0)
find命令对于这种事情非常有用:
例如:
for i in $(find . -type f -print)
do
stuff
done
find命令从搜索开始(第一个参数)开始生成相对的路径名。
如前所述,如果文件名包含空格或其他一些字符,则此操作将失败。
答案 2 :(得分:0)
recurse() {
path=$1
If [ -d "$path" ] ; then
for i in "$path/"*
do
recurse "$i"
done
elif [ -f "$path" ] ; then
do-something
fi
}
调用recurse
并从您要开始的位置传递第一个位置参数作为目录路径。
例如:recurse /path