Решения тех проблем, с которым мне приходилось сталкиваться.

Показаны сообщения с ярлыком файлы. Показать все сообщения
Показаны сообщения с ярлыком файлы. Показать все сообщения

вторник, 21 апреля 2009 г.

имя файла, путь, расширение

Полезно при написании скриптов на bash, которые конвертят и/или переносят файлы.
Имеется полное имя файла. Как извлечь разные его компоненты (отдельно путь, имя с раширением, имя без расширения, отдельно расширение)


foo=/tmp/my.dir/filename.tar.gz

path = ${foo%/*}
file = ${foo##*/}
base = ${file%%.*}
ext = ${file#*.}


При этом получается следующее:

path=/tmp/my.dir
file=filename.tar.gz
base=filename
ext=tar.gz


Первые два выражения аналогичны командам dirname и basename соответственно.

источник

суббота, 27 октября 2007 г.

переименовать группу файлов

Предыстория. Чтобы читать электронные книжки на портативном устройстве я распаковываю chm в html (пакет libchm-dev, команда extract_chmLib). Часто получаемые HTML файлы имеют извращенческий префикс в имени, вида _12345ABCDE_toc.html. Меня это не устраивает и поэтому перед копированием в КПК я делаю так:


rename 's/_12345ABCDE_//g' *.html
А потом и меняю ссылки внутри файлов:

sed -i 's/_12345ABCDE_//g' *.html
UPD: Увидел на одной сайте целый скрипт на шелле, выполняющий единственную функцию - преобразующий имена всех файлов текущей директории в нижний регистр. Я подумал, что наверняка rename это уже умеет. Я оказался прав - вот решение:

rename 'y/[A-Z]/[a-z]/' *
Юзается команда "трансляции" (y), которую в том числе поддерживает и sed.

понедельник, 30 апреля 2007 г.

ZIP и интернациональные символы в именах файлов архива

Программа zip не очень правильно работает с национальными символами в именах файлов. Чтобы потом распаковать архив, созданный, например, под Windows, нужно сделать следующее:


unzip <archive>
convmv -f iso8859-1 -t cp850 -r --notest --nosmart <arch_dir>
convmv -f cp866 -t utf8 -r --notest --nosmart <arch_dir>

Это при условии, что локаль utf8. Если koi8-r, то в последней команде это нужно отразить.

Собственно основную работу выполняет утилитка convmv, предназначенная для преобразования кодировок в именах файлов. Находится она в одноименном пакете.