如何在Linux中将所有包含下划线的文件和文件夹重命名为连字符

Posted

技术标签:

【中文标题】如何在Linux中将所有包含下划线的文件和文件夹重命名为连字符【英文标题】:How to rename all files and folder containing underscore to hyphen in Linux 【发布时间】:2014-05-18 14:55:55 【问题描述】:

我想重命名名称中包含下划线的所有文件和文件夹,并将下划线替换为连字符。

目前我正在使用以下代码,

rename '_' '-' */*/*

它正在工作,但现在它显示“参数列表太长”

【问题讨论】:

该命令可能匹配了太多的文件名,因此它们的扩展名变得很长,至少比shell命令的最大大小长。 我们怎样才能让工作在一个循环中?我将非常感谢有人可以在这里帮助我! 您可能想看看 awk 工具。或者使用 find 命令及其选项 -exec 【参考方案1】:

你可以试试这个:

$ tree foo
foo
├── dir_1
│   └── foo_file_2
└── file_1

1 directory, 2 files
$ for ft in d f; do find foo -type $ft -execdir sh -c 'mv "$0" "$0//_/-"'  \; ; done 2>/dev/null
$ tree foo
foo
├── dir-1
│   └── foo-file-2
└── file-1

1 directory, 2 files

这会重命名所有目录,然后重命名所有文件(for 循环覆盖 d f),因为我无法让它在一次迭代中完成所有重命名。

【讨论】:

以上是关于如何在Linux中将所有包含下划线的文件和文件夹重命名为连字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在 macOS 终端中批量重命名文件?

如何在 Linux 上将所有文件夹和文件重命名为小写?

在nginx中将所有http重定向到https,除了一个文件

在git中将文件批量重命名为小写

sh 在Mac OSX中将所有文件重命名为小写

在linux中重命名文件时包含文件夹名称