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

7

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

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

Я могу извлекать и переименовывать файлы по отдельности, используя:

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

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

Есть ли инструмент, который будет обрезать имена файлов при их извлечении?

    
задан Terence Eden 14.05.2017 в 10:21
источник

1 ответ

6

Чтобы извлечь

Мы можем использовать 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##*.} : создает новое имя файла с законным числом символов, также добавляет фактическое расширение . и файла.

Просто мы переходим в список файлов и извлекаем каждый из них с новым законным именем файла, который имеет 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

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

    
ответ дан Ravexina 14.05.2017 в 10:26
источник