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

Linux 在Bash中使用-exec选项和Find命令,linux,find,exec,Linux,Find,Exec,我正在尝试使用-exec选项和find命令在我的massive panoramas目录中查找特定文件,并将它们移动到指定位置。我在下面使用的命令传递了一个找不到-exec的错误参数。有人能指出我在分析命令时的错误吗?或者我需要创建某种类型的管道吗 $find-name~/path\u to\u directory\u of\u photos/specific\u photo\u names*-exec mv{}/path\u to\u new\u directory/您需要使用转义分号(\)终止

我正在尝试使用-exec选项和find命令在我的massive panoramas目录中查找特定文件,并将它们移动到指定位置。我在下面使用的命令传递了一个找不到-exec的错误参数。有人能指出我在分析命令时的错误吗?或者我需要创建某种类型的管道吗


$find-name~/path\u to\u directory\u of\u photos/specific\u photo\u names*-exec mv{}/path\u to\u new\u 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/
vs

后者的效率要高得多。要使用+,还应该使用--target目录。例如

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

也许可以将此移到serverfault?我投票选择迁移到SuperUser.Com,但实际上在Unix.StackExchange.Com上更合适。好的,谢谢,在~/path_to_new_目录和\之间的末尾遗漏了一个空格;那真让我扫兴。解决了的。
find ~/path_to_directory_of_photos -name "specific_photo_names*" -exec mv --target-directory="~/path_to_new_directory" {} +