2010-10-27 8 views
6

Básicamente solo quiero eliminar todos los archivos en un directorio, pero no obtener todos los directorios principales en el archivo.Impedir que los directorios primarios sean alquitranados

He intentado -C, pero supongo que no lo estoy usando bien.

tar -cjf archive.tar.bz2 -C /var/some/log/path ./* 

Esto da como resultado que tar intente agregar todos los archivos en el CWD. Usar la ruta completa como último argumento no impide que se agreguen los directorios.

Parece bastante simple, pero no puede resolverlo. De alguna manera, tar no alquita ./* como relativo a -C, aunque debería cambiar a ese dir.

Ayuda apreciada.

+0

Es el shell que expande './*' en una lista de nombres de archivo. 'tar' solo ve esta lista de nombres de archivo. – Gilles

Respuesta

11

El directorio padre (/var/some/log) está incluido, ya que /var/some/log/path/.. se incluye cuando se hace ./*. Trate sólo haciendo

tar -cjf archive.tar.bz2 -C /var/some/log/path . 

Prueba de funcionamiento:

$ find tmp/some_files 
tmp/some_files 
tmp/some_files/dir1 
tmp/some_files/dir1/dir1file 
tmp/some_files/hello 
tmp/some_files/world 
tmp/some_files/dir2 
tmp/some_files/dir2/dir2file 
$ tar -cvjf archive.tar.bz2 -C tmp/some_files/ . 
./ 
./dir1/ 
./dir1/dir1file 
./hello 
./world 
./dir2/ 
./dir2/dir2file 
$ cd tmp/unpacked 
/tmp/unpacked$ mv /home/aioobe/archive.tar.bz2 . 
/tmp/unpacked$ tar -xvjf archive.tar.bz2 
./ 
./dir1/ 
./dir1/dir1file 
./hello 
./world 
./dir2/ 
./dir2/dir2file 
/tmp/unpacked$ ls 
archive.tar.bz2 dir1 dir2 hello world 
/tmp/unpacked$ 
+0

Eso es algo mejor, pero ahora es publicidad "." como un directorio padre en el alquitrán. Solo quiero los archivos. – Joe

+0

No, el prefijo "./" es solo una notación. Contiene los archivos en la "raíz" del archivo. – aioobe

+0

Ah. Ya veo. Mi error. – Joe

0

Hay una manera mucho más fácil de hacer esto:

  1. cd hasta el directorio que desea estar a nivel superior, es decir. .

    cd /var/lib/mysql

  2. directorios Quitar los padres de su comando tar

    /var/lib/mysql/DATABASE_NAME se convierte en sólo DATABASE_NAME

Más detalles se pueden encontrar en this blog writeup.

Cuestiones relacionadas