У меня есть zip, которая содержит файлы с очень длинными именами.
Если я пытаюсь извлечь на командной строке, я получаю ошибку "Имя файла слишком долго".
Если я буду использовать графического менеджера архива, то это не извлечет файлы, и это не позволит мне переименовать их. Та же проблема происходит, если я монтирую архив.
Я могу извлечь и переименовать файлы индивидуально с помощью:
unzip -p -c example.zip "long file name.ogg" > shortname.ogg
Это непрактично с большим количеством файлов.
Существует ли инструмент, который усечет имена файлов, поскольку они извлечены?
Мы можем использовать 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
Вы переименовали их всех, можно также записать простой сценарий, которые делают это автоматически для Вас.