Si desea el contenido de un único directorio, un método fácil es cambiarlo primero:
cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
Lo que viste es que se *
expande a la lista de nombres de archivos que no comienzan con a .
. Ese es el comportamiento documentado, y es la razón principal por la que .
se dice que los archivos cuyo nombre comienza con a están ocultos (el otro es que ls
no los muestra por defecto).
No hay una forma portátil realmente conveniente de enumerar todos los archivos en un directorio. Puedes usar
~/my/folder/..?* ~/my/folder/.[!.]* ~/my/folder/*
pero si no hay un archivo que coincida con uno de los patrones, el patrón permanecerá sin expandir. En bash, puede configurar la dotglob
opción para evitar tratar un líder .
especialmente ( .
y ..
aún están excluidos de las coincidencias):
shopt -s dotglob
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*
En ksh, o en bash si configura la extglob
opción (o en zsh si configura la ksh_glob
opción), puede escribir un patrón que coincida con todos los archivos excepto .
y ..
:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/@(..?*|.[!.]*|*)
En zsh, hay una manera más simple de decir que .
no debe tratarse especialmente en un patrón:
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*(D)
*
, intente eliminarla, 7z debería archivar todo el directorio.