Tengo un archivo comprimido como myArchive123.tar.gz
. En su interior contiene una carpeta comohelloWorld
Si lo extraigo: tar -xf myArchive123.tar.gz
obtengo la helloWorld
carpeta:
ls
myArchive123.tar.gz
helloWorld
Me gustaría que la salida sea el mismo nombre que el nombre del archivo menos la extensión .tar.gz. Es decir:
tar <magic paramaters> myArchive123.tar.gz
ls
myArchive123.tar.gz
myArchive123
cd myArchive123
ls
helloWorld
Se puede hacer esto?
- Nunca sé lo que hay dentro del archivo. Podría ser una carpeta, podría haber muchos archivos.
- Estaría bien con el uso de otra herramienta si tar no puede hacerlo.
- Estaría bien con una forma más larga que se puede convertir en un script
EDITAR
Mientras tanto, me pirateé un script que parece hacer el trabajo. (Ver mi respuesta publicada a continuación). Si se puede mejorar, no dude en publicar comentarios / respuestas adicionales. Lo principal es que debe empacarse en una sola línea como:
extract <file>
Respuestas:
Con
gnu tar
, puede usar--xform
(o--transform
) para anteponer/prefix/
a cada nombre de archivo:nota hay ninguna está llevando
/
enprefix/
y lossed
extremos de expresión conS
excluir objetivos enlace simbólico desde las transformaciones de nombre de archivo.Para probarlo (ejecución en seco):
Para comenzar, aquí hay un script muy simplista que puede invocar como
extract <file>
:fuente
Bueno, podrías hacerlo al menos en un par de pasos. Si lo hiciste
eso llevaría a cabo la tarea, aunque todavía puede haber una respuesta más compacta.
fuente
Editar
La respuesta aceptada es más corta que la siguiente. (hacer lo mismo, pero más corto suele ser mejor).
Finalmente me pirateé un guión para la tarea en cuestión. funciona con .tar .tar.gz y .gz
Uso:
Tenga en cuenta que esta solución es capaz de puntos en un nombre de archivo. Por ejemplo, Eclipse-4.5M-SDK.tar.gz.
Mantengo el guión en mi repositorio de git. Para la última versión, consulte: https://github.com/LeoUfimtsev/ldts/blob/master/pathscripts/leo-tar-here
fuente
Una posible solución más es usar la
--transform
opción:Con tus archivos:
fuente
--strip-components=0
simplemente elimina el primer nombre de directorio de la ruta y con la-C
opción almacena los archivos sin archivar en el nuevo directorio.