Tengo un archivo comprimido como myArchive123.tar.gz. En su interior contiene una carpeta comohelloWorld
Si lo extraigo: tar -xf myArchive123.tar.gzobtengo la helloWorldcarpeta:
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 lossedextremos de expresión conSexcluir 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>:STRIP = $ {1%. *} #Strip último sufijo NOMBRE = $ {STRIP% .tar} #strip .tar sufijo, si está presente tar -xf "$ 1" --xform = "s | ^ | $ NAME / | S" #run comandofuente
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
--transformopción:Con tus archivos:
fuente
--strip-components=0simplemente elimina el primer nombre de directorio de la ruta y con la-Copción almacena los archivos sin archivar en el nuevo directorio.