2013-12-21 6 views
0

Я хочу написать скрипт KornShell (ksh) для чтения имени файла из текстового файла (имеющий список префиксов) и сжать его, если он найден в каталоге путем циклирования.читать имя файла из текстового файла в ksh и сжимать

ex: Я сохраню префикс 'abcd' в текстовом файле.

Читая его, я хочу, чтобы сжать файлы в каталоге, совпадающим с именем, как этот ABCD ###. YYYYMMDDXXXXXX.txt

Я не хочу, чтобы сделать что-нибудь с таким же префиксом, но с разными расширениями или различными такие как abcd ###. YYYYMMDDXXXXXX.dat или abcd ###. YYYYMMDDXXXXXX.txt.Z. Я хочу только сжать совпадение, как этот abcd ###. YYYYMMDDXXXXXX.txt.

Как реализовать это в ksh?

+1

Добро пожаловать в «Переполнение стека». Вскоре прочитайте страницу [About]. Обратите внимание, что это хорошая идея, чтобы быть явным в том, что вы подразумеваете под символами в шаблонах имен файлов. В частности, неясно, что «Х» может означать. может быть «все», «любая буква» или «любая буква верхнего регистра». Также не помешает указать, какую программу сжатия вы планируете использовать. –

ответ

2

Поверхностно, это должно сделать:

: ${COMPRESS:=xz} 
while read prefix 
do 
    $COMPRESS ${prefix}[0-9][0-9][0-9].[12][09][0-9][0-9][01][0-9][0-3][0-9]??????.txt 
done < file 

Очевидно, что мне приходится делать некоторые предположения, что # означает цифру, что YYYYMMDD является дата, и что X любой символ (это ? в ответе). Если X означает любой буквенный алфавит или что-то еще, отрегулируйте соответствующим образом. Годовые правила будут принимать 19xx и 20xx (также 10xx и 29xx, но вы вряд ли будете иметь файлы, датированные таким образом, правила месяца принимают 00..19, правила дня принимают 00..39. Если вам нужно проверить еще , то вы не можете легко использовать простую подстановку регулярных выражений.

Я использовал xz как программа компресса. Я не хотел бы использовать программу compress для сжатия, как это просто не сравнить с gzip, не говоря уже о bzip2 или xz, и т. д.

Смежные вопросы