Linux - Замена пробелов в именах файлов
Вопрос
У меня есть несколько файлов в папке, и я хочу заменить каждый пробел во всех именах файлов символами подчеркивания.Как я могу этого добиться?
Решение
Это должно сделать это:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
Другие советы
Я предпочитаю использовать команду '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
на echo 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
Если вы используете bash:
for file in *; do mv "$file" ${file// /_}; done
Укажите ваши переменные:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Удалите " эхо " сделать реальное переименование.
Попробуйте что-то вроде этого, предполагая, что все ваши файлы были .txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
Самый простой способ заменить строку (пробел в вашем случае) другой строкой в Linux
использует sed
.Вы можете сделать это следующим образом
sed -i 's/\s/_/g' *
Надеюсь, это поможет.
Вот еще одно решение:
ls | awk '{printf("\"%s\"\n", <*>)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
<Ол>
Я полагаю, что ваш ответ находится в Заменить пробелы в именах файлов символами подчеркивания .
Чтобы переименовать все файлы с расширением .py
,
<Код>
находить . -iname " *. py " Тип F | xargs -I% rename "s / / _ / g" & Quot;% & Quot;
Код>
Пример вывода,
$ 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