如何使用grep在当前目录中搜索具有给定字符串的所有文件,然后将这些文件移动到新文件夹?

时间:2016-02-03 10:35:03

标签: bash unix grep

我已设法使用

单独执行此操作
grep  -r "zone 19" path

mkdir zone19
find . -name "ListOfFilesfromGrep"  -exec mv -i {}  zone19 \;

我只是不知道如何将两者结合起来,也就是说,如何将我从grep获得的文件列表输入到find命令中。

5 个答案:

答案 0 :(得分:3)

您应该使用grep中的find

find /path/to/dir -type f -exec grep -q "zone 19" {} \; -exec mv -i {} zone19 \;

答案 1 :(得分:1)

您可以管道grep的结果并使用xargs

grep  -lr "zone 19" path | xargs <command>

<command>将应用于grep的每个结果。请注意,-o标记告诉grep仅显示匹配的部分。

答案 2 :(得分:1)

你可以尝试

grep -lr "zone 19" path | while read in ; do mv -i "$in" zone19; done

-l打印带有匹配字符串的文件名; while ... done逐个移动文件。

答案 3 :(得分:1)

使用GNU版本的标准工具:

mv -t会为您提供文件名 xargs -r将移至指定目录 grep -l -r -e 'zone 19' path | xargs -r mv -i -t 'zone19' 将使用来自stdin的参数调用命令,但仅限于至少有一个参数。

将它们组合在一起:

grep -lZr -e 'zone 19' path | xargs -0r mv -it 'zone19'

或(如果您的文件名可能包含换行符等):

{{1}}

答案 4 :(得分:0)

下面是将包含字符串“Hello”的所有文件移动到文件夹zone19的命令。

grep Hello * |cut -f1 -d":"|sort -u|xargs -I {} mv {} zone19