在Bash中使用-exec选项来查找命令

我正在尝试使用find命令的-exec选项来查找我的海量全景目录中的特定文件,并将它们移到指定位置。 我正在使用下面的命令传递一个错误参数找不到–exec。 有人可以指出我的错误parsing命令? 或者我将不得不创build一些类似的pipe道?

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

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

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

正确的命令是:

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

我知道这个帖子是旧的,但这是我的答案,以防其他人帮助。 看到这个职位的背景。 如果用+而不是\来结束命令; 你可以更高效地运行它。 \; 会导致每个文件执行一次“mv”,而+会导致“mv”以最大数量的参数执行。 例如

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

 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" {} +