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), и вы не указали выходной каталог (с -oflag), текущий каталог будет заполнен всеми файлами из вашего архива. Это означает, что если вы снова запустите ту же команду,* селектор теперь будет выбирать не только архивы, но и все извлеченные файлы.
Если вы хотите исключить полный каталог (возможно, этот файл расширения разделен в каталоге)
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'
Здесь каталог поставщиков, представлений и документов исключен.