Bash - переименовать часть имен файлов - PullRequest
0 голосов
/ 08 октября 2011

Мне нужна помощь с моим мини-скриптом, чтобы исправить испанское имя файла с ISO_8859-1 и / или с частью имен, таких как "&#00243"

Сценарий его там: http://www.pastebin.com/vT5Z2BqE

Вчера с 3 вещами, работают, я добавляю больше, и больше не работаю, я не понимаю, почему.

Посмотрите, если я использую эту команду в "Bash Shell" / "Gnome-Terminal", например:

inukaze@Inukaze:~$ cd Filenames_to_fix 
inukaze@Inukaze:~/Filenames_to_fix$ 
inukaze@Inukaze:~/Filenames_to_fix$ expresion='&#00176'
inukaze@Inukaze:~/Filenames_to_fix$ sustituto='°'
inukaze@Inukaze:~/Filenames_to_fix$ ls *$expresion*
01 - La Espada del Augurio &#00176.avi

inukaze@Inukaze:~/Filenames_to_fix$ for i in $( ls $expresion ); do

> orig=$i
> dest=$(echo $i | sed -e "s/$expresion/$sustituto/")
> mv $orig $dest
> done

mv: no se puede efectuar stat' sobre «01»: No existe el fichero o el directorio 
mv: no se puede efectuarstat' sobre «-»: No existe el fichero o el directorio 
mv: no se puede efectuar stat' sobre «La»: No existe el fichero o el directorio 
mv: no se puede efectuarstat' sobre «Espada»: No existe el fichero o el directorio 
mv: no se puede efectuar stat' sobre «del»: No existe el fichero o el directorio 
mv: no se puede efectuarstat' sobre «Augurio»: No existe el fichero o el directorio 
mv: no se puede efectuar `stat' sobre «°»: No existe el fichero o el directorio

Мне нужно, например, изменить часть имени файла "& # 00176" на "ª" Кто-то / кто-то, может объяснить, почему эта ошибка, и как ее исправить ???

Я не хочу интерактивный режим и не хочу заменять «расширение», я хочу «переименовать» плохую часть имени файла, вместо него стоит «Хороший» символ: D.

Спасибо за readme, и извините, мой плохой английский, спасибо за любую помощь, вы можете мне помочь с этим сценарием

Ответы [ 3 ]

1 голос
/ 08 октября 2011

Вы не заключаете в кавычки $ orig и $ dest, и это вызывает проблемы, когда имя файла содержит пробелы (mv задает имя файла в виде нескольких отдельных аргументов (поэтому он печатает несколько сообщений об ошибках с частями имени файла)).Попробуйте вместо этого использовать

mv "$orig" "$dest"

.

0 голосов
/ 08 октября 2011

Доступна ли команда rename?

rename  $expresion $sustituto *$expresion*
0 голосов
/ 08 октября 2011

Цикл for использует пробел в качестве разделителя.Поскольку имя вашего файла содержит пробелы, вам необходимо изменить то, что вы используете в качестве разделителя.

Здесь эквивалентно использование find и while

find . -maxdepth 1 -name "*${expresion}*" -print0 | while read -d $'\0' file
do
    orig="$file"
    dest=$(echo "$file" | sed -e "s/${expresion}/${sustituto}/")
    mv "$orig" "$dest"
done

ОДНАКО, aЛучшее решение - использовать команду rename:

rename $expresion $sustituto *${expresion}*
...