Если вы хотите, чтобы содержимое одного каталога было проще, сначала измените его:
cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
То, что вы видели, это то, что *
расширяется до списка имен файлов, которые не начинаются с .
. Это задокументированное поведение, и это основная причина, по которой файлы, имена которых начинаются с символа, .
называются скрытыми (другая причина - ls
они не отображаются по умолчанию).
Не существует действительно удобного переносимого способа перечисления всех файлов в каталоге. Ты можешь использовать
~/my/folder/..?* ~/my/folder/.[!.]* ~/my/folder/*
но если нет файла, соответствующего одному из шаблонов, шаблон останется нерасширенным. В bash вы можете установить dotglob
опцию, чтобы избежать особой обработки ведущего .
( .
и ..
все еще исключены из матчей):
shopt -s dotglob
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*
В ksh или в bash, если вы установили extglob
параметр (или в zsh, если вы установили ksh_glob
параметр), вы можете написать шаблон, который соответствует всем файлам, кроме .
и ..
:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/@(..?*|.[!.]*|*)
В zsh есть более простой способ сказать, что .
не должен обрабатываться специально в шаблоне:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*(D)
*
, попробуйте удалить его, 7z должен заархивировать весь каталог.