
Necesito crear un archivo de un directorio usandotar
en un script de shellpero también se supone que debo excluir archivos ocultos y archivos cuyo tamaño sea igual a 0
. Además, el primer argumento de la línea de comando es la ubicación del archivo que se supone que se debe crear, el segundo es el nombre del archivo y el tercero es la ruta al directorio cuyos archivos se supone que se deben archivar.
Intenté enviar argumentos como este en mi terminal:
/bin/bash ss1 /home/user arch /home/user/folder
Pero me está dando algunos errores de alquitrán. Intenté archivar así:
tar -cvf --exclude=.* $1/$2 $3
Pero no es correcto y no estoy seguro de cuál sería la sintaxis correcta para esto, ni tampoco cómo excluiría los archivos vacíos y ocultos.
Respuesta1
Como etiquetaste esto, linux
asumiré que tienes GNU find
y GNU tar
.
Si sus nombres de archivos no tienen nuevas líneas incrustadas y no desea archivar directorios vacíos:
find "$3" -type f \! -empty \! -name '.*' | tar cvf "$1/$2" -T -
find
encuentra los archivos relevantes y -T -
le indica tar
que lea la lista de archivos para archivar stdin
.
Refinando esto, si desea incluir directorios vacíos:
find "$3" \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) | \
tar cvf "$1/$2" -T -
Y si tutambiéndesea manejar nombres de archivos con nuevas líneas incrustadas:
find "$3" \( \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) \) -print0 | \
tar cvf "$1/$2" --null -T -
Respuesta2
Prueba esto:
find test/ -not -iname ".*" -not -empty -exec tar --no-recursion -rvf file.tar {} \;
El único problema es que los directorios vacíos no se incluirán, pero creo que hay alguna solución en alguna parte...