从所有txt文件中作为参数给出的字符串的grep文件,并将它们复制到另一个目录

时间:2018-01-07 12:55:44

标签: linux shell unix command-prompt

我必须从当前目录复制到目标文件夹中的所有 .txt 文件,其中包含作为参数给出的字符串。

要查找并显示这些文件,我使用了代码:

mkdir $1

for i in '*.txt'
do
    grep -r -l $2 > lines.log
done

但我怎样才能复制这些文件?

1 个答案:

答案 0 :(得分:0)

观察:

  • 代码似乎暗示目标目录$1没有 存在。不好,因为它可能存在。
  • 不需要循环。
  • 不需要> lines.log等重定向。
  • 不需要grep递归(-r)选项,可能会造成麻烦。

代码:

  1. 简单,但仅适用于字母数字文件名:

    test -e "$1" || mkdir "$1"
    test -d "$1" && cp $(grep -l -s "$2" *.txt) "$1"
    

    注意那些test。如果没有这样的文件(test -e),请创建 目的地。然后,如果目的地是a,则 目录,复制文件。

    如果$1已经存在,但不是目录,则不执行任何操作。

  2. 健壮,(应该适用于所有文件名),但更加模糊:

    grep -Zsl "$2" | cpio -p0dmv ../"$1" 
    

    代码从Adam Katz's answer to "grep file for string and copy directory to another directory"被盗。