在Bash中使用Find命令的-exec选项

4
我正在尝试使用find命令的-exec选项,在我的大型全景照片目录中查找特定文件,并将它们移动到指定位置。我使用的以下命令传递了一个“找不到- exec”的错误参数。有人能指出我解析命令时的错误吗?还是我需要创建某种管道? $ find -name ~/path_to_directory_of_photos/specific_photo_names* -exec mv {} ~/path_to_new_directory/

1
也许把这个问题转到ServerFault上? - Chuck Vose
我投票支持迁移到SuperUser.Com,但实际上在Unix.StackExchange.Com更为合适。 - Jörg W Mittag
3个回答

7

您需要使用转义分号(\;)来终止您的exec命令。


好的,谢谢。我之前在~/path_to_new_directory和;之间漏了一个空格,这让我有些困惑。问题已解决。 - Hollis

3

在运行find命令之前,您应该引用名称模式,否则shell将展开其中的任何通配符。您还需要使用分号(通过反斜杠转义以避免shell将其解释为命令分隔符)来指示mv命令的结束。

正确的命令应该是:

find ~/path_to_directory_of_photos -name "specific_photo_names*" -exec mv {} ~/path_to_new_directory \;

1

我知道这篇文章有些旧了,但如果有人需要的话,下面是我的答案。请参考此帖子提供的背景。如果您使用+而不是\;来结束命令,可以更高效地运行它。 \;会导致"mv"一次处理一个文件,而"+"会将"mv"与最大数量的参数一起执行。例如:

mv source1 destination/
mv source2 destination/
mv source3 destination/

vs.

mv source1 source2 source3 destination/

后者更加高效。要使用 +,你还应该使用 --target-directory。例如:
find ~/path_to_directory_of_photos -name "specific_photo_names*" -exec mv --target-directory="~/path_to_new_directory" {} +

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接