Помогите переименовать файлы по определенному критерию.

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: Помогите переименовать файлы по определенному критерию.

Сообщение ZyX »

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 . ,


Спасибо сказали: