我必须从当前目录复制到目标文件夹中的所有 .txt 文件,其中包含作为参数给出的字符串。
要查找并显示这些文件,我使用了代码:
mkdir $1
for i in '*.txt'
do
grep -r -l $2 > lines.log
done
但我怎样才能复制这些文件?
答案 0 :(得分:0)
观察:
$1
没有
存在。不好,因为它可能存在。> lines.log
等重定向。grep
递归(-r
)选项,可能会造成麻烦。代码:
简单,但仅适用于字母数字文件名:
test -e "$1" || mkdir "$1"
test -d "$1" && cp $(grep -l -s "$2" *.txt) "$1"
注意那些test
。如果没有这样的文件(test -e
),请创建
目的地。然后,如果目的地是a,则仅
目录,复制文件。
如果$1
已经存在,但不是目录,则不执行任何操作。
健壮,(应该适用于所有文件名),但更加模糊:
grep -Zsl "$2" | cpio -p0dmv ../"$1"
代码从Adam Katz's answer to "grep file for string and copy directory to another directory"被盗。