7zip: Как исключить типы файлов?
Я хочу исключить следующие типы файлов:
- EPUB
- HTML (в верхнем регистре тоже)
- azw3
- моби
- БКП
- текст
У меня есть это до сих пор, который, кажется, не работает, я получаю сообщение об ошибке "Неверная командная строка".
7z e "-x!*.epub" "-x!*.pdf" "-x!*.html" "-x!*.azw3" "-x!*.mobi" "-x!*.txt" "-x!*.HTML" "-x!*.opf" *
Я также попробовал вышеупомянутую команду без двойных кавычек.
Я создал вышеупомянутую команду, используя информацию отсюда (для окон), но она не работает в Linux.
3 ответа
7z
принимает только один архив в своих аргументах, но вы передаете подстановочный знак, который раскрывается до полного содержимого текущего рабочего каталога; Еще одна проблема заключается в том, что подстановочные знаки в аргументах также будут расширяться, если они не заключены в кавычки или заключены в двойные кавычки.
Таким образом, вы должны извлечь только один архив на команду; в конце следует удалить подстановочный знак, указать один архив и заключить в кавычки аргументы:
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' {} \;
От 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
Возможно, извлечение из нескольких архивов было невозможно во время вопроса.
По состоянию на 2020 год 7z
можно извлекать из нескольких архивов, но их нужно указать специальным флагом:
-ai[r[-|0]]{@listfile|!wildcard}
Include archives
Обратите внимание, что когда вы используете это, вам больше не нужно указывать archive_name
в командной строке (где вы пропустили *
), поэтому вам нужно отключить его с помощью-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
flag), текущий каталог будет заполнен всеми файлами из вашего архива. Это означает, что если вы снова запустите ту же команду,*
селектор теперь будет выбирать не только архивы, но и все извлеченные файлы.
Если вы хотите исключить полный каталог (возможно, этот файл расширения разделен в каталоге)
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'
Здесь каталог поставщиков, представлений и документов исключен.