Извлекать
Мы можем использовать 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
Вы переименовали их все, вы также можете написать простой скрипт, который сделает это автоматически для вас.
unzip -l <ARCHIVE>и как вы хотите, чтобы имена были усечены? Вы хотите сохранить структуру каталогов внутри архива во время извлечения?