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)