Переименование / удаление пробелов в каталогах - PullRequest
1 голос
/ 09 февраля 2020

Довольно плохо знаком с Linux, но обнаружил «нелюбовь» Linux к пробелам в именах.

Используя: rename 's/ /_/g' *, он переименовывает все в этом каталоге, добавляя _underscore вместо пространства. Таким образом, " test dir nr 1 становится" test_dir_nr_1", а" test file 1.txt"становится" test_file_1.txt"

Но! Есть ли в любом случае сделать его автоматизированным и рекурсивным (это правильное слово?), Также делая подкаталоги в подкаталогах?

1 Ответ

1 голос
/ 09 февраля 2020

С GNU find:

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

Это ищет обычные файлы и каталоги, содержащие в своих именах пробел, используя ваш текущий каталог (.) в качестве начального каталога, и рекурсивно переименовывает их. Я только добавил флаг -v erbose, чтобы вы могли видеть, что происходит.

Чтобы вывести список файлов и каталогов, на которые будет влиять команда, удалите часть -execdir:

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

Конечно, вы можете заменить . на абсолютный или относительный путь.

...