Se vuoi il contenuto di una singola directory, un metodo semplice è quello di cambiarlo prima:
cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
Quello che hai visto è che si *
espande all'elenco dei nomi di file che non iniziano con a .
. Questo è il comportamento documentato, ed è il motivo principale per cui i file il cui nome inizia con a .
vengono detti nascosti (l'altro è che ls
non li mostra per impostazione predefinita).
Non esiste un modo portatile davvero conveniente per elencare tutti i file in una directory. Puoi usare
~/my/folder/..?* ~/my/folder/.[!.]* ~/my/folder/*
ma se non esiste alcun file corrispondente a uno dei pattern, il pattern rimarrà non espanso. In bash, puoi impostare l' dotglob
opzione per evitare di trattare .
specialmente un leader ( .
e ..
sono ancora esclusi dalle partite):
shopt -s dotglob
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*
In ksh o in bash se si imposta l' extglob
opzione (o in zsh se si imposta l' ksh_glob
opzione), è possibile scrivere un modello che corrisponda a tutti i file tranne .
e ..
:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/@(..?*|.[!.]*|*)
In zsh, c'è un modo più semplice per dire che .
non deve essere trattato in modo speciale in uno schema:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*(D)
*
, prova a rimuoverlo, 7z dovrebbe archiviare l'intera directory.