查找:缺少`-execdir'的参数

时间:2018-04-20 16:46:24

标签: windows bash shell git-bash

我用git-bash在win 10中工作。我有一大堆文件,所有文件都没有扩展名。但是我意识到那些类型为“文件”的是html文件。为了选择这些我已被展示:

$ find -not -name '*.*'

现在我需要重命名所有这些文件以添加.html扩展名(它们目前没有扩展名)。我试过了:

$ find -not -name '*.*' -execdir mv {} {}.html
find: missing argument to `-execdir'

如何重命名这些文件?

1 个答案:

答案 0 :(得分:1)

您错过了; - 传递了一个文字分号,表示作为-exec操作的一部分解析的参数的结尾。接受这样的终结符允许find接受-exec之后的其他操作,否则该系列中的任何操作都需要是命令行中的最后一个参数。

find -not -name '*.*' -execdir mv -- '{}' '{}.html' ';'

尽管如此,请注意,上述内容并不能保证完全正常工作(或使用以破折号开头的名称)。更便携的是:

find . -not -name '*.*' -exec sh -c 'for arg do mv -- "$arg" "$arg.html"; done' _ {} +

请注意更改:

  • 指定开始搜索的目录的.在POSIX标准find中是必需的;将它遗留在GNU平台上的能力是一个不可移植的扩展。
  • 运行显式shell意味着您不需要{}.html支持,因此可以使用任何合规find
  • --确保将以下参数解析为文字文件名,而不是mv的选项,即使它们以短划线开头。
  • 在上文中,显式_变为shell的$0,因此后来的参数变为$1及以后 - 即。数组,也称为"$@"for默认迭代。