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

Пользователи, не являющиеся администраторами, не могут установить программное обеспечение, потому что пакеты запускаются от имени root, когда они устанавливаются по мере их установки в привилегированные части системы, запускают сценарии поддержки и т. д.

В настоящее время нет способа сообщите системе «Установите firefox из этого .deb, но в домашний каталог пользователя, чтобы он был изолирован от остальной системы»; поэтому в настоящее время это в основном все или ничего. (Это также связано с тем, что работа с сторонними .debs плоха, пакет и включенные скрипты имеют root-доступ к вашей системе)

7
задан 14 May 2017 в 14:45

3 ответа

Для извлечения

Мы можем использовать 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.

Получить (! d11)

Запустите эту команду:

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

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

6
ответ дан 22 May 2018 в 22:38
  • 1
    Это невероятно полезно, спасибо! Я не мог заставить пример zipnote работать - и первый удаляет расширение файла, но это достаточно хорошо для того, что мне нужно сделать. Благодаря! – Terence Eden 14 May 2017 в 14:05
  • 2
    Я обновил ответ, теперь он будет продолжать расширение тоже;) – Ravexina 14 May 2017 в 14:24
  • 3
    Вы должны использовать IFS= read -r i, если имена файлов начинаются с пробела или содержат вещи, которые оболочка может интерпретировать как escape-последовательности. – David Foerster 19 May 2017 в 14:05

Для извлечения

Мы можем использовать 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.

Получить (! d11)

Запустите эту команду:

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

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

7
ответ дан 18 July 2018 в 13:19

Для извлечения

Мы можем использовать 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.

Получить (! d11)

Запустите эту команду:

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

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

7
ответ дан 24 July 2018 в 20:09

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

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