【问题标题】:Searching for a Specific String in multiple files and Copying all the files recursively在多个文件中搜索特定字符串并递归复制所有文件
【发布时间】:2014-06-10 15:44:12
【问题描述】:

我在多个目录和子目录中有 35K + 奇数个文件。 FILE CONTENT 中有 1000 个带有唯一字符串“FOO”的奇怪文件(.c .h 和其他文件名)。我正在尝试将这些文件单独(保留目录结构)复制到不同的目录“MEOW”。有人可以查看我的 bash 执行并纠正我的错误吗

for Eachfile in `find . -iname "*FOO*" ` 
do
cp $Eachfile MEOW
done

出现以下错误

./baash.sh: line 2: syntax error near unexpected token `$'do\r''

'/baash.sh: line 2: `do

【问题讨论】:

  • 文件名或文件内容中的唯一字符串?
  • 文件内容中的唯一字符串
  • 这个循环似乎完全有效。它对我有用转换它。

标签: bash scripting


【解决方案1】:

如果您只想在 .c 和 .h 文件中搜索字符串 FOO 则

find ./  -name "*\.c" -o -name "*\.h" -exec grep -l FOO {} \; | xargs  cp -t MEOW/

对我来说,即使没有xrags--null 选项,它也可以工作,如果不适合你.. 然后在 xargs 部分中附加-0,如下所示:

xargs  -0 cp -t MEOW/

【讨论】:

    【解决方案2】:

    要查找当前目录下所有包含字符串“FOO”的文件并将它们复制到目录MEOW,请使用:

    grep --null -lr FOO . | xargs -0 cp -t MEOW
    

    find 不同,grep 查找文件的内容。 grep-l 选项告诉它只列出文件名。 -r 选项告诉它递归地在子目录中查找。因为文件名中可以​​包含空格和其他奇数字符,所以我们将--null 选项赋予grep,以便在它生成的列表中,文件名由空字符安全地分隔。 xargs -0 从该空分隔文件名列表中读取,并将它们作为参数提供给命令 cp -t MEOW,该命令将它们复制到目标目录 MEOW

    【讨论】:

      【解决方案3】:
      for file in $(find -name '*.c' -o -name '*.h' -exec grep -l 'FOO' {} \;); do
          dname=$(dirname "$file")
          dest="MEOW/$dname"
          mkdir -p $dest
          cp "$file" "$dest"
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-28
        • 1970-01-01
        • 1970-01-01
        • 2012-09-09
        • 2016-08-02
        • 2013-03-31
        相关资源
        最近更新 更多