使用Bash遍历目录和子目录中的所有文件

时间:2018-08-02 12:45:51

标签: bash

我知道如何遍历目录中的所有文件,例如:

for i in *
do
  <some command>
done

但是我想浏览目录中的所有文件,包括(尤其是!)子目录中的所有文件。有没有简单的方法可以做到这一点?

3 个答案:

答案 0 :(得分:2)

findxargs是递归处理目录和子目录内容的出色工具。例如

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