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