0

我希望能够找到包含某些字符串的文件并将该文件列表移动到目录 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;
4

3 回答 3

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

如果文件名包含空格或冒号,这将无法按预期工作

于 2013-02-28T03:27:21.290 回答
2

使用循环。在这种情况下,请尝试:

for i in `find . -iname 'commaus*' | xargs grep '>24901<' -sl`; do mv "$i" /home/user/scripts/xslt/; done

非常hackish,但它应该工作。

于 2013-02-28T03:30:10.643 回答
2

也可以尝试(无循环):

find . -iname 'commaus*' | grep '>24901<' -sl -ok | xargs mv -t /home/user/scripts/xslt
于 2013-02-28T03:49:34.673 回答