7z
принимает только один архив в своих аргументах, но вы передаете подстановочный знак, который раскрывается до полного содержимого текущего рабочего каталога; Еще одна проблема заключается в том, что подстановочные знаки в аргументах также будут расширяться, если они не заключены в кавычки или заключены в двойные кавычки.
Таким образом, вы должны извлечь только один архив на команду; в конце следует удалить подстановочный знак, указать один архив и заключить в кавычки аргументы:
7z e '-x!*.epub' '-x!*.pdf' '-x!*.html' '-x!*.azw3' '-x!*.mobi' '-x!*.txt' '-x!*.HTML' '-x!*.opf' archive.7z
Однако, чтобы извлечь несколько архивов одновременно, вы можете использовать несколько методов:
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 . -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' {} \;