Windows 查找:`-execdir';缺少参数;
我和git bash一起在win 10中工作。我有一大组文件,它们都没有扩展名。然而,我意识到“File”类型的文件是html文件。要选择这些,我已显示:Windows 查找:`-execdir';缺少参数;,windows,bash,shell,git-bash,Windows,Bash,Shell,Git Bash,我和git bash一起在win 10中工作。我有一大组文件,它们都没有扩展名。然而,我意识到“File”类型的文件是html文件。要选择这些,我已显示: $ find -not -name '*.*' 现在我需要重命名所有这些文件以添加.html扩展名(它们目前没有扩展名)。我试过: $ find -not -name '*.*' -execdir mv {} {}.html find: missing argument to `-execdir' 如何重命名这些文件?您缺少一个--传递的
$ find -not -name '*.*'
现在我需要重命名所有这些文件以添加.html扩展名(它们目前没有扩展名)。我试过:
$ find -not -name '*.*' -execdir mv {} {}.html
find: missing argument to `-execdir'
如何重命名这些文件?您缺少一个
--传递的文字分号,表示作为-exec
操作一部分解析的参数的结束。接受这样的终止符可以让find
接受-exec
之后的其他操作,否则该系列中的任何操作都需要是命令行上的最后一个参数
find -not -name '*.*' -execdir mv -- '{}' '{}.html' ';'
也就是说,请注意,上述方法根本不能保证有效(或者不能用于以破折号开头的名称)。更便于携带的是:
find . -not -name '*.*' -exec sh -c 'for arg do mv -- "$arg" "$arg.html"; done' _ {} +
注意这些变化:
- 指定开始搜索的目录的
在POSIX标准
中是必需的;把它放在GNU平台上的能力是不可移植的扩展find
- 运行显式shell意味着不需要支持
,因此可以使用任何兼容的{}.html
find
确保以下参数被解析为文本文件名,而不是--
的选项,即使它们以破折号开头mv
- 在上面的例子中,显式的
变为shell的\
,因此后面的参数变为$0
并向前——也就是说,数组也称为$1
,默认情况下,“$@”
迭代for
最后的code>或+
是必须的。还要注意的是,POSIX标准根本不能保证{}.html
能够正常工作{}
只被授权作为一个单独的单词,而不是子字符串,因此子字符串的大小写可能有效,也可能无效,这取决于您的实现。如果他在Windows上这样做,POSIX实际上并不相关,它几乎肯定是GNU find。谢谢,它确实有效,但我注意到目录也被重命名为具有.html扩展名。有没有办法避免这种情况?输入-type f
以筛选文件,或输入-not-type d
以仅排除目录。