Они имеют" Введение в Искусство Поблочного тестирования " на Зоне Разработчика Зенда, которая покрывает PHPUnit.
Это должно сработать:
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
.
Если вы используете 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
Что делать, если вы хотите применить задачу замены рекурсивно ? Как бы вы это сделали?
Ну, я сам нашел ответ. Не самое элегантное решение (также пытается переименовать файлы, не соответствующие условию), но оно работает. (Кстати, в моем случае мне нужно было переименовать файлы с "% 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