我希望能够找到包含某些字符串的文件以及将该文件列表移动到目录X
我可以使用此命令查找文件
find . -iname 'commaus*' | xargs grep '>24901<' -sl
和此命令移动文件
mv * /home/user/scripts/xslt
但是有没有办法组合这些命令,以便移动找到的文件。
我见过类似的联合查找/动作命令,例如
find /home/user -name property_images -ok rm -f {} \;
但遵循此结构会返回错误
find . -iname 'commaus*' | xargs grep '>24901<' -sl -ok mv {} /home/user/scripts/xslt;
答案 0 :(得分:2)
你可以把它包装成for循环
for i in `find /path/to/search -iname 'optionalfilename' -exec grep -H -m1 '>24901<' {} \; | awk -F: '{print $1}'
do
mv $i /path/to/new/location
done
如果文件名包含空格或冒号
,则无法按预期工作答案 1 :(得分:2)
使用循环。在这种情况下,请尝试:
for i in `find . -iname 'commaus*' | xargs grep '>24901<' -sl`; do mv "$i" /home/user/scripts/xslt/; done
非常hackish,但它应该工作。
答案 2 :(得分:2)
也可以尝试(没有循环):
find . -iname 'commaus*' | grep '>24901<' -sl -ok | xargs mv -t /home/user/scripts/xslt