У меня около 200+ условно-бесплатных файлов в формате zip, каждый из которых содержит файл с именем «FILE_ID.DIZ». Мне нужно знать, как переименовать каждый экземпляр в «file_id.diz» в нижний регистр, не делая этого вручную - я уже прошел этот путь, и это довольно много времени. Этот файл должен быть в нижнем регистре, потому что программа BBS, которую я использую, игнорирует FILE_ID.DIZ в качестве описания, так как она в верхнем регистре. Если я вручную изменю его на строчные, описание будет успешно импортировано.
Я знаю, что у rar есть переключатель переименования, но тогда мне придется пакетно конвертировать все zip-файлы в rar, а затем обратно в zip. Я не исключаю этого полностью, но похоже, что до решения этой проблемы еще далеко.
Я нашел man-страницу для «zip_rename», которая, похоже, могла бы сработать, но я понятия не имею, как на самом деле это реализовать.
Я отказываюсь делать это на компьютере с Windows - я просто не могу и не буду этого делать… это принцип;).
В любом случае, спасибо за ваше время!
Вы можете использовать функцию переименования 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
Этот метод не переименовывает файл, но добавляет строчную версию файла .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