🐧 Как переименовывать/заменять пробелы в файлах во всем каталоге рекурсивно

by itisgood

Цель этого руководства – показать различные методы переименования или замены пробелов в нескольких файлах.

Некоторые инструменты в системе Linux могут некорректно работать с файлами, содержащими пробелы, что может побудить некоторых пользователей заменить пробелы, например, символами подчеркивания.

Манипулировать файлами без пробелов гораздо проще, поскольку вам не нужно каждый раз заботиться об экранировании имени файла.

В этом руководстве вы увидите, как переименовывать/заменять пробелы рекурсивно на Linux.

Статья будет включать в себя переименование отдельных файлов, целого каталога, а также содержимого каталога и содержимого всех его подкаталогов.

Примеры рекурсивного переименования/замены пробелов в файлах во всем каталоге

Все следующие примеры будут выполняться в командной строке Linux.

Откройте терминал и перейдите в каталог, содержащий файлы, которые вы хотите переименовать, а затем попробуйте выполнить некоторые из приведенных ниже команд для начала работы.

Чтобы заменить пробелы во всех файлах на символы подчеркивания, выполните следующую команду внутри цикла Bash for.

Обратите внимание, что эта команда не затрагивает файлы в подкаталогах.

$ for f in *; do mv "$f" $(echo $f | tr ' ' '_'); done

Чтобы удалить белые пробелы в отдельном файле и заменить их символами подчеркивания, вы можете использовать следующую команду:

$ myfile="some file.txt" ; mv "$myfile" $(echo $myfile | tr ' ' '_')

Здесь мы присваиваем переменной $myfile имя файла, который мы хотим переименовать.

Это позволяет нам обращаться к переменной два раза в нашей последующей команде.

Убедитесь, что в приведенном примере вы убрали файл file.txt и поставили на его место свое собственное имя файла.

Что если мы хотим полностью удалить белое пространство и ничего не ставить на его место?

В этом случае мы можем опустить знак подчеркивания в команде tr в приведенных выше примерах и использовать опцию -d.

$ for f in *; do mv "$f" $(echo $f | tr -d ' '); done

Чтобы рекурсивно заменить все белые пробелы в именах файлов на символы подчеркивания, мы можем использовать команду Linux find.

Обратите внимание, что эта команда обойдет все подкаталоги, независимо от их глубины, и изменит имена всех файлов, содержащих пробелы.

Это поведение можно изменить с помощью параметра -maxdepth.

$ find . -type f -name "* *" -exec bash -c 'mv "$0" "${0// /_}"' {} \;

Если в вашей системе Linux установлена утилита rename, то существует очень простой синтаксис для удаления пробелов из всех файлов и замены их символами подчеркивания:

$ rename 's/\s/_/g' ./*.*

Утилита, которая обычно не устанавливается по умолчанию в Linux, но может выполнять эту работу очень хорошо, – это mmv.

Следующая команда удалит все белые пробелы и заменит их символами подчеркивания:

$ mmv '* *' '#1_#2'

Заключение

В этом руководстве мы рассмотрели, как удалить пробелы из файлов в системе Linux.

С файлами без пробелов легче работать, так как они совместимы с большим количеством инструментов в Linux, и нам не нужно помнить о том, что имена файлов нужно экранировать каждый раз, когда мы работаем с файлами.

Независимо от того, нужно ли вам переименовать несколько файлов или несколько тысяч, команды, приведенные в этом руководстве, позволят выполнить задачу переименования в кратчайшие сроки.

см. также:

 

You may also like

Leave a Comment