Tengo un solo directorio que contiene docenas de directorios dentro de él.
Soy nuevo en la línea de comandos y estoy luchando por encontrar un comando que comprima cada subdirectorio en un archivo sub-directory.zip único.
Entonces, al final, mi directorio principal se completará con todos mis subdirectorios originales, más los .zip
archivos correspondientes que contienen el contenido comprimido de cada subdirectorio.
¿Es posible algo así? Si es así, muéstrame cómo se hace.
command-line
directory
zip
Evster
fuente
fuente
Respuestas:
Puedes usar este bucle en
bash
:i
es el nombre de la variable del bucle.*/
significa cada subdirectorio del directorio actual e incluirá una barra inclinada final en esos nombres. Asegúrese decd
ir al lugar correcto antes de ejecutar esto."$i"
simplemente nombra ese directorio, incluida la barra diagonal final. Las comillas aseguran que los espacios en blanco en el nombre del directorio no causen problemas.${i%/}
es como$i
pero con la barra diagonal eliminada, por lo que puede usar eso para construir el nombre del archivo zip.Si desea ver cómo funciona esto, incluya un
echo
antes delzip
y verá los comandos impresos en lugar de ejecutados.fuente
*/
nombres de cada subdirectorio directo, no todos los directorios descendientes. Por lo tanto, solo obtendrá cremalleras para el nivel superior, tal como lo desea. La versión conecho
ella habría demostrado ese aspecto. En realidad, comprimir cada directorio anidado en su propio archivo sería más trabajo y probablemente se resolvería mejor utilizando,find -type d
entre otros trucos.zip
binario, podría obtener un comportamiento diferente. Para crear también archivos zip para directorios de nivel superior (es decir, hijos del directorio actual) comenzando con un punto, puede usarshopt -s dotglob
para que los patrones globales también coincidan con los archivos ocultos.for i in */; do (cd "$i"; zip -r "../${i%/}.zip" .); done