Unix:遍历一个目录

时间:2011-09-28 16:40:37

标签: linux bash unix

我需要遍历一个目录,所以从一个目录开始,然后深入到不同的子目录。但是,我还需要能够访问每个单独的文件来修改文件。是否已有命令执行此操作或是否必须编写脚本?有人可以提供一些代码来帮助我完成这项任务吗?感谢。

6 个答案:

答案 0 :(得分:5)

find命令只是其中的工具。其-exec标志或-print0与xargs -0结合使用,可以对每个文件的操作进行细粒度控制。

示例:在/ tmp和子目录中的所有文件中用bar替换所有foo。

find /tmp -type f -exec sed -i -e 's/foo/bar/' '{}' ';'

答案 1 :(得分:2)

for i in `find` ; do
  if [ -d $i ] ; then do something with a directory ; fi
  if [ -f $i ] ; then do something with a file etc. ; fi
done

这将返回循环将通过的列表中当前目录中的整个树(递归)。

答案 2 :(得分:2)

这可以通过混合findxargssed(或其他文件修改命令)轻松实现。

例如: $ find /path/to/base/dir -type f -name '*.properties' | xargs sed -ie '/^#/d'

这会过滤所有文件扩展名为.properties的文件。 xargs命令会将file path命令生成的find提供给sed命令。 sed命令会删除文件中以#开头的所有行(xargs提供)。

这种方式的命令组合非常灵活。

例如,find命令具有不同的参数,因此您可以按用户名,文件大小,文件路径(例如:在/ test /子文件夹下),文件修改时间进行过滤。

灵活性的另一个方面是文件中的更改方式和内容。例如,sed命令允许您在应用替换时对文件进行更改(通过正则表达式指定)。同样,您可以使用gzip来压缩文件。等等...

答案 3 :(得分:1)

您通常会使用find命令。在Linux上,您当然拥有GNU版本。它有许多额外的(和有用的)选项。两者都允许您在找到文件时对文件执行命令(例如shell脚本)。

如何更改文件的确切详细信息取决于您要对文件进行的更改。这可能是最好的脚本,find运行脚本:

POSIX或GNU:

find . -type f -exec your_script '{}' +

这将为一组文件运行您的脚本,并将这些名称作为参数提供。如果您想一次只执行一个文件,请将+替换为';'(或\;)。

答案 4 :(得分:0)

我假设SearchMe是您需要完全遍历的示例目录名称 我也假设,因为没有指定,你要修改的文件都是文本文件。这是对的吗?

在这种情况下,我建议使用命令:

find SearchMe -type f -exec vi {} \;

如果您不熟悉vi编辑器,请使用另一个(nanoemacskatekwritegedit等等。它应该也可以。

答案 5 :(得分:0)

Bash 4 +

shopt -s globstar
for file in **
do
    if [ -f "$file" ];then
        # do some processing to your file here
        # where the find command can't do conveniently        
    fi
done