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

У меня есть zip, которая содержит файлы с очень длинными именами.

Если я пытаюсь извлечь на командной строке, я получаю ошибку "Имя файла слишком долго".
Если я буду использовать графического менеджера архива, то это не извлечет файлы, и это не позволит мне переименовать их. Та же проблема происходит, если я монтирую архив.

Я могу извлечь и переименовать файлы индивидуально с помощью:

unzip -p -c example.zip "long file name.ogg" > shortname.ogg

Это непрактично с большим количеством файлов.

Существует ли инструмент, который усечет имена файлов, поскольку они извлечены?

9
задан 14 May 2017 в 04:45

1 ответ

Извлечь

Мы можем использовать zipinfo как часть этого процесса, это - программа от zip пакет.

zipinfo -2 example.zip

будет только показывать имена файлов в example.zip, что-то похоже:

file1-long-name-...-bla-bla.html
file2-long-name-...-bla-bla.html

таким образом, мы можем использовать эту функцию для извлечения всех файлов:

zipinfo -2 example.zip | while read i;
do
  long_fname=${i%.*}
  unzip -p -c example.zip "$i" > "${long_fname:0:250}.${i##*.}"
done;
  • long_fname=${i%.*}: Удаляет расширение из длинного имени файла, таким образом, в случае имени файла, являющегося меньше что 256 характеров; мы не собираемся получать дублирующееся расширение.
  • ${long_fname:0:250}.${i##*.}: Создает новое имя файла с законным количеством символа, также добавляет a . и файл реальное расширение.

Просто мы - цикличное выполнение в список файлов и извлекаем каждого из них с новым законным именем файла, которое является 256 символами.


Переименовать

Можно использовать zipnote команда, это - часть zip пакет также.

Получите резервное копирование своего zip-файла сначала.

Выполните эту команду:

zipnote example.zip > names

Открытые имена с помощью редактора, это, похожи на это:

@ file name long in zip and a lot of other strings in the file name
@ (comment above this line)
@ (zip file comment below this line)

Добавьте новые имена файлов как это:

@ file name long in zip and a lot of other strings in the file name
@=new short name for above file
@ (comment above this line)
@ (zip file comment below this line)

Затем переименовать использование файлов:

zipnote -w example.zip < names

Вы переименовали их всех, можно также записать простой сценарий, которые делают это автоматически для Вас.

11
ответ дан 23 November 2019 в 04:59

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

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