Se você deseja 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 a .
. Esse é o comportamento documentado e é o principal motivo pelo qual os arquivos cujo nome começa com a .
ficam ocultos (o outro é que ls
não os mostra por padrão).
Não existe uma 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 dotglob
opção para evitar o tratamento de um líder .
especialmente ( .
e ..
ainda é excluído das correspondências):
shopt -s dotglob
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*
No ksh, ou no bash, se você definir a extglob
opção (ou no zsh, se a ksh_glob
opção), você pode escrever 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)
*
, tente removê-lo, o 7z deve arquivar todo o diretório.