【问题标题】:Using -exec option with Find command in Bash在 Bash 中将 -exec 选项与 Find 命令一起使用
【发布时间】:2010-09-24 19:52:54
【问题描述】:

我正在尝试将 -exec 选项与 find 命令一起使用,以在我的海量全景图目录中查找特定文件并将它们移动到指定位置。我在下面使用的命令传递了一个找不到 -exec 的错误参数。有人可以指出我在解析命令时的错误吗?还是我必须创建某种管道?

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

【问题讨论】:

  • 也许将其移至服务器故障?
  • 我投票支持迁移到 SuperUser.Com,但实际上在 Unix.StackExchange.Com 上更合适。

标签: linux find exec


【解决方案1】:

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

【讨论】:

  • 好的,谢谢,在 ~/path_to_new_directory 和 \; 之间缺少一个空格;那让我绊倒了。解决了。​​
【解决方案2】:

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

正确的命令是:

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

【讨论】:

    【解决方案3】:

    我知道这篇文章很旧,但这是我的答案,以防它帮助其他人。查看this post的背景。如果您以 + 而不是 \ 结束命令;你可以更有效地运行它。 \;将导致“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" {} +
    

    【讨论】:

      猜你喜欢
      • 2013-12-07
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多