Proyectos respetables liberan archivos de alquitrán que contienen un único directorio, por ejemplo, zyrgus-3.18.tar.gz
contiene una zyrgus-3.18
carpeta que a su vez contiene src
, build
, dist
, etc.
Pero algunos proyectos punk ponen todo en la raíz: '- (Esto resulta en un desorden total cuando se desarchiva. Crear una carpeta manualmente cada vez es un dolor e innecesario la mayor parte del tiempo.
- ¿Hay una manera súper rápida de saber si un archivo .tar o .tar.gz contiene más de un directorio en su raíz? Incluso para un gran archivo.
- O mejor aún, ¿existe una herramienta que en tales casos crearía un directorio (nombre del archivo sin la extensión) y pondría todo dentro?
But some punk projects put everything at the root :'-(
Y algunos proyectos punk colocan todo dentro de una carpeta completamente innecesariamente, considerando que ya están poniendo todo dentro de un archivo adjunto, de modo que cuando lo descarga y descomprime en su propia carpeta como lo haría cualquier usuario inteligente, termina con todos los contenido enterrado otra capa hacia abajo. ;-)Respuestas:
patool maneja diferentes tipos de archivos y crea un subdirectorio en caso de que el archivo contenga múltiples archivos para evitar el desorden en el directorio de trabajo con los archivos extraídos.
Extraer archivo
Para obtener una lista de los formatos compatibles, use
patool formats
.fuente
alien
convertirlo en un deb para Ubuntu.patool
debería estar en los repositorios de Debian y Ubuntu si está ejecutando una versión actual.Podrías hacer algo como
para ver qué entradas de nivel superior tiene un alquitrán; tubería para
wc -l
verificar si hay más de uno. Tenga en cuenta que hay algunos casos en los que esto podría fallar, por ejemplo, si el tar contiene rutas de archivo del formulariosomedir/whatever
y también./somedir/whatever
(o algo más loco); Sin embargo, esto debería ser poco común.Esto leerá todo el archivo tar antes de generar algo, debido a que
sort
, aunque debería ser más rápido que extraerlo realmente porque es solo una lectura secuencial y puede omitir archivos grandes.Si usted está haciendo esto de forma interactiva y el archivo puede ser grande, puede cambiar
sort -u
auniq
y Control+ Csi se imprime más de una cosa.fuente
sort | uniq
se puede acortar asort -u
.uniq -c
tu puedes hacer:
... para enumerar el contenido de un
tar
archivo.si quieres saber cuántos niveles de profundidad tiene, puedes hacer:
puede prohibir explícitamente una explosión en la extracción con:
fuente
Esto debería hacer lo que quieras. Estoy seguro de que alguien puede mejorarlo. En estos ejemplos, supongo un archivo tar comprimido de gzip ya que este es el más común.
Desea un archivo donde no haya nodos hermanos en el árbol de directorios del nivel raíz.
Cada entrada en la lista de contenido de alquitrán debe comenzar con el mismo patrón. Este patrón es la ruta del directorio base que todas las entradas del archivo deben compartir. Si dos entradas cualesquiera no comienzan con el mismo patrón, entonces son hermanos.
La primera línea en la lista de contenido de alquitrán le dará el patrón mínimo que debe verificar. Esta es la BASEPATH.
A continuación, a prueba de bolas de alquitrán explosivos que necesita para comprobar si cualquier línea de la lista de contenido de alquitrán no comienzan con la BASEPATH.
Convierta esto en una función de shell:
Desde aquí puede escribir una función segura de extracción de archivos tar.
fuente
aunpack archive.tar
es lo que usoParte del buen y viejo paquete de herramientas . Página de manual: https://linux.die.net/man/1/atool
fuente