Linux-замена пробелов в именах файлов
У меня есть несколько файлов в папке, и я хочу заменить каждый символ пробела во всех именах файлов с подчеркиванием. Как я могу этого достичь?
10 ответов:
Я предпочитаю использовать команду 'rename', которая принимает регулярные выражения в стиле Perl:
rename "s/ /_/g" *
вы можете сделать сухой прогон с флагом-n:
rename -n "s/ /_/g" *
использовать sh...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Если вы хотите попробовать это, прежде чем нажать на курок просто изменить
mv
toecho mv
.
Что делать, если вы хотите применить заменить задание рекурсивно? Как бы ты это сделал?
Ну, я только что нашел ответ сам. Нет самого элегантного решения (пытается переименовать также файлы, которые не соответствуют условию), но работает. (Кстати, в моем случае мне нужно было переименовать файлы с "%20", а не с подчеркиванием)
#!/bin/bash find . -type d | while read N do ( cd "$N" if test "$?" = "0" then for file in *; do mv "$file" ${file// /%20}; done fi ) 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