Renaming/removing 目录中的空格

Renaming/removing spaces in directories

对 Linux 很陌生,但发现 'dislike' Linux 在名称中有空格。

通过使用 :rename 's/ /_/g' * 它通过添加 _underscore 而不是空格来重命名该目录中的所有内容。 所以“test dir nr 1 变成了“test_dir_nr_1”和“test file 1.txt”变为“test_file_1.txt

但是!有没有办法让它自动化和递归(这个词对吗?,)也在子目录中做子目录?

使用 GNU find:

find . -name "* *" \( -type f -o -type d \) -execdir rename -v 's/ /_/g' {} +

这将使用当前目录 (.) 作为起始目录搜索名称中包含 space 字符的常规文件和目录,并递归地重命名它们。我刚刚添加了 -verbose 标志,这样您就可以看到会发生什么。

要列出受命令影响的文件和目录,删除 -execdir 部分:

find . -name "* *" \( -type f -o -type d \)

您当然可以将 . 替换为绝对或相对路径。