我已设法使用
单独执行此操作grep -r "zone 19" path
mkdir zone19
find . -name "ListOfFilesfromGrep" -exec mv -i {} zone19 \;
我只是不知道如何将两者结合起来,也就是说,如何将我从grep获得的文件列表输入到find命令中。
答案 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