Как мне переименовать конкретный файл в нескольких zip-архивах через командную строку?

У меня около 200+ условно-бесплатных файлов в формате zip, каждый из которых содержит файл с именем «FILE_ID.DIZ». Мне нужно знать, как переименовать каждый экземпляр в «file_id.diz» в нижний регистр, не делая этого вручную - я уже прошел этот путь, и это довольно много времени. Этот файл должен быть в нижнем регистре, потому что программа BBS, которую я использую, игнорирует FILE_ID.DIZ в качестве описания, так как она в верхнем регистре. Если я вручную изменю его на строчные, описание будет успешно импортировано.

Я знаю, что у rar есть переключатель переименования, но тогда мне придется пакетно конвертировать все zip-файлы в rar, а затем обратно в zip. Я не исключаю этого полностью, но похоже, что до решения этой проблемы еще далеко.

Я нашел man-страницу для «zip_rename», которая, похоже, могла бы сработать, но я понятия не имею, как на самом деле это реализовать.

Я отказываюсь делать это на компьютере с Windows - я просто не могу и не буду этого делать… это принцип;).

В любом случае, спасибо за ваше время!

2
задан 27 June 2012 в 07:30

2 ответа

Вы можете использовать функцию переименования zipnote info-zip: http://www.info-zip.org/FAQ.html#rename

for zip_filename in *.zip; do
    # Only process original zip files.
    if [ "${zip_filename%.fixed.zip}" = "${zip_filename}" ] ; then
        # Create a copy which will be modified later.
        cp ${zip_filename} ${zip_filename%.zip}.fixed.zip

        # Get all filenames, change some of them on the fly and write them to the zip file.
        zipnote ${zip_filename} \
          | sed -e 's/^@ \(.*\)FILE_ID.DIZ/@ \1FILE_ID.DIZ\n@=\1file_id.diz/' \
          | zipnote -w ${zip_filename%.zip}.fixed.zip
    fi
done
0
ответ дан 27 June 2012 в 07:30

Этот метод не переименовывает файл, но добавляет строчную версию файла .DIZ. Надеюсь, это будет достаточно для ваших целей.

Это использует функциональность zip «добавить по умолчанию», при которой, если вы укажете существующий zip-файл, он добавит к нему файлы. Так что если вы сделаете:

zip doom.zip file_id.diz

и doom.zip существует, он просто добавит файл file_id.diz к существующему содержимому.

Это должно выполняться в каталоге, в котором находятся ваши zip-файлы:

for i in  *zip; do rm FILE_ID.DIZ;  unzip "$i" FILE_ID.DIZ; mv FILE_ID.DIZ file_id.diz; zip -d "$i" FILE_ID.DIZ; zip "$i" file_id.diz; done

Обратите внимание, что для достижения наилучших результатов ни одно из имен .zip-файлов не должно содержать пробелов.

Вы также можете поместить это в файл, скажем, rename.sh (и это выглядит лучше и проще для понимания таким образом):

#!/bin/bash
for i in  *zip; do
   rm FILE_ID.DIZ
   unzip "$i" FILE_ID.DIZ
   mv FILE_ID.DIZ file_id.diz
   zip -d "$i" FILE_ID.DIZ
   zip "$i" file_id.diz
done

тогда вы можете запустить, сказав, например, bash rename.sh

0
ответ дан 27 June 2012 в 07:30

Другие вопросы по тегам:

Похожие вопросы: