我必须将包含作为参数给出的字符串的所有 .txt 文件从当前目录复制到目标文件夹。
为了查找并显示这些文件,我使用了代码:
mkdir $1
for i in '*.txt'
do
grep -r -l $2 > lines.log
done
但是我怎样才能复制这些文件呢?
最佳答案
观察结果:
- 该代码似乎暗示目标目录
$1
并不 存在。不好,因为它可能存在。 - 不需要循环。
- 不需要像
>lines.log
这样的重定向。 - 不需要
grep
递归 (-r
) 选项,并且可能会导致问题。
代码:
简单,但仅适用于字母数字文件名:
test -e "$1" || mkdir "$1" test -d "$1" && cp $(grep -l -s "$2" *.txt) "$1"
注意那些
测试
。如果没有这样的文件(test -e
),则创建 目的地。然后,仅如果目的地是 目录,复制文件。如果
$1
已经存在,但它不是目录,则不执行任何操作。健壮(应该适用于所有文件名),但更晦涩:
grep -Zsl "$2" | cpio -p0dmv ../"$1"
代码被盗自Adam Katz's answer to "grep file for string and copy directory to another directory" .
关于linux - 从所有 txt 文件中查找作为参数给出的字符串的 Grep 文件,并将它们复制到另一个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48137300/