【问题标题】:shell script to traverse files recursively递归遍历文件的shell脚本
【发布时间】:2011-03-21 14:16:22
【问题描述】:

在创建 shell 脚本以在文件夹中的每个文件上运行特定命令(任意)以及递归地深入子目录时,我需要一些帮助。

我不知道如何开始。

一个正确方向的点就足够了。谢谢。

【问题讨论】:

  • 实际上有数百种方法可以做到这一点。最佳解决方案取决于您的目标,因此如果您愿意分享它,您可能会得到更好的答案。

标签: shell scripting file


【解决方案1】:

递归列出所有文件

find . -name '*'

比如说你想在每个文件上“grep” -

find . -type f -name 'pattern' -print0 | xargs -0 grep 'searchtext'

【讨论】:

  • -name '*' 不是您想要的。它应该是 -type f 以仅匹配文件。要执行命令,请使用-exec,而不是管道。
  • grepping /dev/urandom 可能需要一段时间 ;-) 我建议添加 -type f
  • 至于grepping你最好只是grep -R ;-)
【解决方案2】:

您应该查看find 命令。

例如,更改/tmp 目录下所有JPEG 文件的权限:

find /tmp -name '*.jpg' -exec chmod 777 {} ';'

不过,如果文件很多,您可以将其与xargs 组合起来进行批量处理,例如:

find /tmp -name '*.jpg' | xargs chmod 777

并且,关于支持空分隔的findxargs 的实现:

find /tmp -name '*.jpg' -print0 | xargs -0 chmod 777

【讨论】:

    【解决方案3】:

    要将命令(例如,echo)应用于当前路径下的所有文件,请使用

    find . -type f -exec echo "{}" \;
    

    对于目录,使用-type d

    【讨论】:

      【解决方案4】:

      重击 4.0

      #!/bin/bash
      shopt -s globstar
      for file in **/*.txt
      do
        echo "do something with $file"
      done
      

      【讨论】:

        【解决方案5】:

        在 bash 脚本中,您可以通过以下方式查看“查找”命令的结果:

        for F in `find . -type f`
        do
         # command that uses $F
        done
        

        【讨论】:

          猜你喜欢
          • 2014-08-27
          • 1970-01-01
          • 2013-12-07
          • 1970-01-01
          • 2016-03-12
          • 1970-01-01
          • 1970-01-01
          • 2018-07-24
          • 1970-01-01
          相关资源
          最近更新 更多