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