LINUX.ORG.RU

Скрипт.


0

0

Плиз, кому не влом объяснять очевидное, помогите написать скрипт.

find /var/ftp/pub | sed 's/^/"/' | sed 's/$/"/' | sort -r > /tmp/tmplist

iconv -f cp1251 -t koi8-r /tmp/tmplist > /tmp/tmplist.encoded

mv $(cat /tmp/tmplist) $(cat /tmp/tmplist.encoded)

Когда делаю так - mv вывливается с обшибкой, что последним аргументом должен быть каталог. Но ведь последний элемент и есть каталог!

Плиз на man bash не отсылать, уже сам "отослался", посто скрипт хотелось бы написать побыстрее.

Да, кста, скрипт должен перекодировать и переименовывать файлы. Если есть утилита, то скажите, но если одновременно с этим не влом будет и помочь - то пожалуйста. :)

Заранее спасибо.

★★★★

> Но ведь последний элемент и есть каталог!
Где гарантия? Попробуй find /var/ftp/pub -type d

rihad
()

Почему ты решил, что последний файл каталог?

Попробуй последнюю команду заменить:

paste /tmp/tmplist /tmp/tmplist.encoded | xargs -l1 mv

если я правильно понял, что тебе надо.

anonymous
()
Ответ на: комментарий от rihad

не, так он выкинет мне просто список каталогов. А мне это не нужно.

find у меня ищет все фалы и каталоги в данном каталоге. И список по идее начинается с каталога. Потом я добавляю кавычки с начала и с конца, дабы не было траблов с файлами с пробелами в имени и iconv'лю кодировку. Один вопрос - как надо добавить аргументы для mv?

gr_buza ★★★★
() автор топика

Нельзя так делать. Во первых нужен mv для _каждого_ файла отдельно. Во вторых возможны проблемы с русскими именами каталогов. В третьих cp1251->koi8-r не всегда возможно. Попробуй так:

find /var/ftp/pub -depth | while read f ; do
fenc=`iconv -f cp1251 -t koi8r <<<"${f##*/}"`
mv "$f" "${f%/*}/$fenc"
done

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

Поправка

Еще стоит проверить ошибки и нужность перекодирования:

find /var/ftp/pub -depth | while read f ; do
fenc=`iconv -f cp1251 -t koi8r <<<"${f##*/}"` || continue
test "${f##*/}" = "$fenc" || mv "$f" "${f%/*}/$fenc"
done

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.