Se você quiser o conteúdo de um único diretório, um método fácil é alterá-lo primeiro:
cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
O que você viu é que * se expande para a lista de nomes de arquivos que não começam com . . Esse é o comportamento documentado, e é a principal razão pela qual os arquivos cujo nome começa com . estão ocultos (o outro é que ls não os mostra por padrão).
Não há nenhuma maneira portátil realmente conveniente de listar todos os arquivos em um diretório. Você pode usar
~/my/folder/..?* ~/my/folder/.[!.]* ~/my/folder/*
mas se não houver um arquivo que corresponda a um dos padrões, o padrão permanecerá não expandido. No bash, você pode definir a opção dotglob para evitar tratar especialmente . ( . e .. ainda estão excluídos das correspondências):
shopt -s dotglob
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*
Em ksh, ou no bash se você definir a opção extglob (ou em zsh se definir a opção ksh_glob ), poderá gravar um padrão que corresponda a todos os arquivos, exceto . e .. :
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/@(..?*|.[!.]*|*)
No zsh, há uma maneira mais simples de dizer que . não deve ser tratado especialmente em um padrão:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*(D)