Estoy tratando de crear un programa gráfico para mi script.
Dentro del script, uso tar para crear un archivo tar.
Del programa gráfico obtengo el nombre completo del archivo que quiero crear un archivo tar.
tar -cvf temp.tar /home/username/dir1/dir2/selecteddir
Mi archivo tar incluye home, username, dir1, dir2 y selecteddir, mientras que quiero que tar cree un archivo que solo incluya selecteddir.
dirname
para extraer todo hasta "selecteddir" ybasename
para extraer "selecteddir". Pruebe los dos comandos con la ruta $ como argumento.tar -C /home/username/dir1/dir2 -cvf temp.tar '*.csv'
no funcionaHay dos métodos que puede usar para abordar este problema.
El primero, en mi opinión, es más fácil. Simplemente
cd
en el directorio directamente encima del que desea comprimir. En este caso lo seríadir2
.La segunda forma es usar la opción
--transform
que toma unased
expresión y la ejecuta contra los nombres de los archivos. Nota: deberás escapar/
en lased
expresión.fuente
tar: Cowardly refusing to create an empty archive
. Cuando tengo el punto, molestamente hace que la raíz contenga un directorio llamado.
. Entonces, cerca pero no perfecto.$ cd /home/username/dir1/dir2/ && tar -cvf temp.tar selecteddir *
trabajó para mi. Usando asterisco en lugar de un punto.
. Actualización: Woops: aunque perdí los archivos ocultos.Primero, ve al directorio de trabajo,
Entonces usa magia
*
:-)fuente
En realidad, encontré un problema al usar la respuesta de Ketan
Cuando quiera copiar todos los archivos solo en dir2, solo todos los archivos, primero se me ocurre la idea:
Sin embargo, cuando no está en el directorio dir2, causaría problemas ya que * archivaría los archivos tar en su diectroy actual. Y arreglé el problema usando el siguiente comando:
fuente
.
como una carpeta raíz.