7zip: Как исключить типы файлов?

Я хочу исключить следующие типы файлов:

  • epub
  • PDF
  • HTML (верхний регистр также)
  • azw3
  • mobi
  • личные дела персонала
  • txt

У меня есть это до сих пор, которое, кажется, не работает, я получаю ошибку при высказывании "Неправильной Командной строки".

7z e "-x!*.epub" "-x!*.pdf" "-x!*.html" "-x!*.azw3" "-x!*.mobi" "-x!*.txt" "-x!*.HTML" "-x!*.opf" *

Я также попробовал вышеупомянутую команду без двойных кавычек.

Я создал вышеупомянутую команду с помощью информации отсюда (для окон), но это, кажется, не работает в соответствии с Linux.

8
задан 20 March 2017 в 03:18

4 ответа

7z только принимает единственный архив в его аргументах, но Вы передаете подстановочный знак, который расширяется до полного содержания текущего рабочего каталога; проблема anothe - то, что также подстановочные знаки в аргументах расширятся также, или, если не заключено в кавычки или дважды заключено в кавычки.

Таким образом, необходимо только извлечь единственный архив на команду; необходимо удалить подстановочный знак в конце, указать единственный архив и одинарную кавычку аргументы:

7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' archive.7z

Для извлечения нескольких архивов сразу однако, можно использовать несколько методов:

  • bash:
for archive in *.7z; do 7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' "$archive"; done
  • find:
find . -maxdepth 1 -type f -iname "*.7z" -exec 7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' {} \;
8
ответ дан 23 November 2019 в 05:30

От man 7z:

-x[r[-|0]]]{@listfile|!wildcard}
              Exclude filenames

Для исключения файла (или типы) можно использовать следующую команду:

7z a -xr@exclude.txt backup.7z /whatever/dirs/or/files

Уведомление -xr вместо -x. Эти r указывает рекурсивный, таким образом, это может соответствовать исключенным файлам в глубоких иерархиях папок

, файл exclude.txt является списком, разделенным возвратами каретки как это:

*.epub
*.pdf
*.html 
*.HTML
*.azw3
*.mobi
*.opf
*.txt
8
ответ дан 23 November 2019 в 05:30

Если Вы хотите исключить полный каталог (можно было разделить этот дополнительный файл в каталоге),

 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on ~/bkpFile_$(date +"%d_%b_%Y").1.7z /home/ubuntu/projectfile -mx0 '-xr!vendor' '-xr!view' '-xr!documents' 

Здесь, поставщик, представление и каталог документов были исключены.

-2
ответ дан 23 November 2019 в 05:30

Возможно, извлечение из нескольких архивов было невозможно на момент вопроса.

По состоянию на 2020 год 7z могут извлекать из нескольких архивов, но вам нужно указать их специальным флагом:

       -ai[r[-|0]]{@listfile|!wildcard}
              Include archives

docs

Обратите внимание, что при использовании этого вы больше не необходимо указать имя_архива в командной строке (где вы передали *), поэтому вам необходимо отключить его с помощью -an флаг.

Остальные ваши флаги работают так, как вы их поставили, за исключением кавычек: они необходимы, чтобы избежать интерпретации ! и * вашей оболочкой. В bash двойные кавычки ("..") по-прежнему допускают расширения, поэтому необходимо использовать одинарные кавычки ('...').Альтернативой является экранирование этих символов, например. -x\!\*.html.

Итак, ваша команда выглядит следующим образом:

7z e -an '-ai!*' '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf'

Я рекомендую сделать флаг включения немного более конкретным, чем *, потому что он выберет все файлы в каталоге. И поскольку вы использовали команду e (а не x) и не указали выходной каталог (с флагом -o), текущий каталог будет заполнен со всеми файлами из вашего архива. Это означает, что если вы снова запустите ту же команду, селектор * теперь будет выбирать не только архивы, но и все извлеченные файлы.

0
ответ дан 25 September 2020 в 12:53

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

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