excluir archivos vacíos y ocultos al archivar

excluir archivos vacíos y ocultos al archivar

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, linuxasumiré que tienes GNU findy 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 -

findencuentra los archivos relevantes y -T -le indica tarque 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...

información relacionada