Tengo la siguiente estructura de directorios:
base/
files/
archives/
scripts/
Quiero ejecutar un script scripts/
, comprimir archivos que coincidan results.*.log
en files/
un archivo tar comprimido con gzip archives/
.
Estoy intentando el siguiente comando:
tar czfC ../archives/archive.tar.gz ../files results.*.log
Pero consigo
tar: results.*.log: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Mientras
tar czfC ../archives/archive.tar.gz ../files results.a.log
Funciona como se esperaba. también
tar czf ../archives/archive.tar.gz ../files/results.*.log
funciona de la manera que me gustaría, excepto que agrega el prefijo files/
al archivo y también emite una advertencia:
tar: Removing leading `../' from member names
Entonces, mi conclusión es que el tar
bloqueo no funciona correctamente cuando se usa la -C
opción. ¿Algún consejo sobre cómo hago que esto funcione de una manera simple?
cd
suceda.&&
es como;
o nueva línea, separa dos comandos. Es como decir que después de ejecutarsecd
, cualquier glob expandiría los archivos en el directorio anterior.No hay "globulación de alquitrán", el glocking lo realiza el caparazón. Y el shell no tiene idea de que
tar -C somedir
hará su trabajosomedir
, cualquier globo se expande en el directorio actual.fuente
results.a.log
existe en el directorio desde el que se ejecuta el script, funciona. Pero no entiendo por qué sucede esto, ya que-C
significa cambio de directorio, por lo que el directorio actual debería ser el que tieneresults.a.log
. No puedo aceptar tu respuesta porque no ofreces una solución.tar
programa, que cambia el directorio mucho más tarde. No puedo "resolver" tu problema, lo siento. La única forma de salir es moverse al directorio donde desea glob, o hacer el globbing en el directorio y guardar sus resultados en un archivo o variable.Puede dejar de pasar por
find
alto y omitir la opción 'cambiar directorio'tar
eliminando elfiles/
prefijo antes de crear el archivo tar.La
--no-recursion
opción atar
es opcional ya que no se archivarán directorios.fuente
Finalmente usé
fuente
La forma de hacerlo es escribir algo como lo siguiente:
fuente
No es el alquitrán el que pega, es el caparazón. Primero le está diciendo al shell que haga globbing, luego le dice a tar que cambie los directorios. Como tar está recibiendo una lista de nombres de archivos relativos a los directorios originales, esto no funciona.
La solución más fácil con diferencia es dejar que el shell cambie el directorio. Interactivamente:
En un guion:
o
fuente