winhex писал(а): ↑12.10.2010 15:16Что пишет? У меня всё работает.
На команду
Код: Выделить всё
find . -type d -name "* *" -print0 | xargs -0 rename " " _
не пишет ничего. Но и ничего не делает. Т.е. имена каталогов с пробелами остаются такими же, как были.
пытаюсь этой же командой произвести замену точки на запятую так:
Код: Выделить всё
find . -type d -name "* *" -print0 | xargs -0 rename "." ,
получаю в ответ:
Код: Выделить всё
syntax error at (eval 1) line 1, near "." xargs: rename: завершен со статусом 255; прерываюсь
Наверняка вы перепутали один rename с другим. Судя по ошибке, это тот rename, что написан на Perl и в нём надо использовать синтаксис из второго ответа в этой теме: rename 's/\./,/g' {files}.
winhex писал(а): ↑12.10.2010 15:16Вашим скриптом это кст. тоже не получилось сделать:
Код: Выделить всё
mv: cannot move `./145' to `,/145': No such file or directory
При этом ваш скрипт замечательно работает. Проблема возникла только с точками. Пробовал делать так:
Код: Выделить всё
Rename . "." ,
и другими способами экранировать, но что-то не выходит с точкой
Вот решение проблемы с точками:
~/tmp/bash/test-rename.sh (Created by format.vim)
Rename() {
(
cd "$1"
for fname in * .* ; do
[ -e "$fname" ] || continue
[ "a$fname" = "a.." ] && continue
[ "a$fname" = "a." ] && continue
newfname="${fname//$2/$3}"
if [ -d "$fname" ] && [ "a$newfname" != "a$fname" ] ; then
mv "$fname" "$newfname"
fname="$newfname"
fi
if [ -d "$fname" ] ; then
Rename "$fname" "$2" "$3"
fi
done
)
}
Rename testdir . ,