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

时间:2010-09-24 19:52:54

标签: linux find exec

我正在尝试使用-exec选项和find命令在我的大量全景图目录中查找特定文件并将它们移动到指定位置。我在下面使用的命令传递了一个找不到-exec的错误参数。有人可以在解析命令时指出我的错误吗?或者我是否需要创建一些管道呢?

$ find -name~ / path_to_directory_of_photos / specific_photo_names * -exec mv {}〜/ path_to_new_directory /

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

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

正确的命令是:

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

答案 2 :(得分:0)

我知道这篇文章已经过时了,但这是我的回答,以防它帮助其他人。请参阅this post的背景信息。如果用+结束命令而不是\;你可以更有效地运行它。 \;会导致" mv"每个文件执行一次,而+将导致" mv"用最大数量的参数执行。 E.g。

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

VS

mv source1 source2 source3 destination/

后者效率更高。要使用+,您还应该使用--target-directory。 E.g。

find ~/path_to_directory_of_photos -name "specific_photo_names*" -exec mv --target-directory="~/path_to_new_directory" {} +