“重命名”命令可以区分目录和文件吗?

“重命名”命令可以区分目录和文件吗?

我只需要重命名目录而不是文件,并且我想使用 来完成rename

有什么办法吗?

手册中没有提到如何区分目录和文件。

此命令改变所有内容,无论目录还是文件:

rename 's/ /\n/g' *

这个命令解决了我的问题:

rename 's/ /\n/g' */

我需要在它后面加一个斜线。

答案1

rename不区分文件和文件夹。


shell 负责将通配符扩展*为文件和文件夹。

  • *将扩展到所有非隐藏文件和文件夹。
  • */将扩展到所有非隐藏文件夹。

但我不知道有什么方法可以仅扩展到文件。你可以改用find -exec

仅限文件夹:

rename 's/ /\n/g' */

或者

find . -maxdepth 1 -type d -exec rename 's/ /\n/g' {} +

仅限文件:

find . -maxdepth 1 -type f -exec rename 's/ /\n/g' {} +

请注意,find还会发现隐藏文件不像(除非您通过运行*打开shell 选项)。dotglobshopt -s dotglob


zsh似乎能够仅匹配文件使用通配符。


免责声明:我不建议在文件名中添加换行符,因为它可能会引起麻烦并破坏许多脚本。

相关内容