У меня есть несколько файлов в папке, и я хочу заменить каждый пробел во всех именах файлов символами подчеркивания. Как я могу этого добиться?
У меня есть несколько файлов в папке, и я хочу заменить каждый пробел во всех именах файлов символами подчеркивания. Как я могу этого добиться?
Ответы:
Это должно сделать это:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for file in *; do mv "$file" $(echo $file | tr ' ' '_') ; done
*
на PATH_TO_YOUR_DIRECTORY
.
Я предпочитаю использовать команду rename, которая принимает регулярные выражения в стиле Perl:
rename "s/ /_/g" *
Вы можете выполнить пробный прогон с флагом -n:
rename -n "s/ /_/g" *
rename " " "_" *
rename
похоже, недоступно в OSX.
rename
доступно.
Используйте ш ...
for i in *' '*; do mv "$i" `echo $i | sed -e 's/ /_/g'`; done
Если вы хотите попробовать это перед тем, как нажать на курок, просто измените mv
на echo mv
.
Если вы используете bash:
for file in *; do mv "$file" ${file// /_}; done
mv --help' for more information. mv: when moving multiple files, last argument must be a directory Try
mv --help 'для получения дополнительной информации.
mv --help' for more information. mv: missing file argument Try
Для получения дополнительной информации попробуйте mv --help '. mv: отсутствует аргумент файла. mv --help' for more information. mv: missing file argument Try
Для получения дополнительной информации попробуйте mv --help '.
Что делать, если вы хотите применить задачу замены рекурсивно ? Как бы Вы это сделали?
Ну я только что сам нашел ответ. Не самое элегантное решение (также пытается переименовать файлы, которые не соответствуют условию), но оно работает. (Кстати, в моем случае мне нужно было переименовать файлы с помощью "% 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
Попробуйте что-нибудь подобное, предполагая, что все ваши файлы были .txt:
for files in *.txt; do mv “$files” `echo $files | tr ‘ ‘ ‘_’`; done
tr --help' for more information. mv: missing file argument Try
Для получения дополнительной информации попробуйте mv --help '.
Вот еще одно решение:
ls | awk '{printf("\"%s\"\n", $0)}' | sed 'p; s/\ /_/g' | xargs -n2 mv
Цитируйте свои переменные:
for file in *; do echo mv "'$file'" "${file// /_}"; done
Удалите «эхо», чтобы выполнить фактическое переименование.
\'1130 lake micigan view.jpg\'': No such file or directory mv: cannot stat
\ '1130_1_bedroom_floor_plan.jpg \' ': Нет такого файла или каталога mv: cannot stat \'1130_BedPicture_8.jpg\'': No such file or directory mv: cannot stat
\' 1130_diningroom_table.jpg \ '': Нет такого файла или каталога
Самый простой способ заменить строку (пробел в вашем случае) другой строкой 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
1 - foo.jpg
моя папка уже была1.jpg
в ней.