Linux-замена пробелов в именах файлов

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

10 ответов


Это должно сделать это:

for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done

Я предпочитаю использовать команду "переименовать", которая принимает regexes в стиле Perl:

rename "s/ /_/g" *

вы можете выполнить сухой прогон с флагом-n:

rename -n "s/ /_/g" *

используйте sh...

for i in *' '*; do   mv "$i" `echo $i | sed -e 's/ /_/g'`; done

Если вы хотите попробовать это, прежде чем нажать на курок просто изменить mv to echo mv.


Что делать, если вы хотите применить заменить задание рекурсивно? Как ты это сделаешь?


Если вы используете bash:

for file in *; do mv "$file" ${file// /_}; done

цитата переменные:

for file in *; do echo mv "'$file'" "${file// /_}"; done

удалите "Эхо", чтобы сделать фактическое переименование.


попробуйте что-то вроде этого, предполагая, что все ваши файлы были .тхт это:

for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done

Я считаю, что ваш ответ находится в заменить пробелы в именах файлов подчеркиванием.


самый простой способ заменить строку (пробел в вашем случае) с другой строкой в Linux С помощью sed. Вы можете сделать это следующим образом

sed -i 's/\s/_/g' *

надеюсь, что это помогает.


переименовать все файлы с .py расширение использования, find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"

образца

$ find . -iname "*.py" -type f                                                     
./Sample File.py
./Sample/Sample File.py
$ find . -iname "*.py" -type f | xargs -I% rename "s/ /_/g" "%"
$ find . -iname "*.py" -type f                                                     
./Sample/Sample_File.py
./Sample_File.py