unzip
tiene una opción ingeniosa -j
, por la cual se descarta la estructura de directorios del archivo y todos los archivos se extraen en el mismo directorio.
¿Hay alguna manera de hacer el tar
trabajo de la misma manera? Nada en la página del manual parece indicarlo.
Entonces, ¿existe una herramienta alternativa, preferiblemente de software libre, que haga eso?
Respuestas:
El alquitrán GNU vive de la featuritis, por lo que, naturalmente, también tiene algunas opciones para eso.
http://www.gnu.org/software/tar/manual/html_node/transform.html
Si solo desea eliminar algunos segmentos de ruta, entonces
--strip-components=n
o--strip=n
a menudo lo hará:Pero también es posible regex-reescribir los archivos a extraer (las banderas son
--transform
o--xform
y aceptan ereg con el/x
modificador):Para enumerar un alquitrán, necesita la
--show-transformed
opción adicional :Creo que las opciones de reescritura también funcionan para empacar, no solo para extraer. Pero
pax
obviamente tiene una sintaxis más agradable.fuente
s#.*/##
?--strip
no se menciona en la página del manual de os x tar, pero funciona de todos modos, ¡gracias!--strip
y--strip-components
?Puede hacerlo con bastante facilidad en dos pasos. Adaptarse según sea necesario:
fuente
find -exec mv -i
lugar defind | xargs
) ... pasos simples que puedo repetir en cualquier sistema sin tener que cargar un script para hacerlo por mí.tmpdir=$( mktemp -d )
es útil al crear directorios temporalespax
puede hacerlo:o
Puede verificar la operación de reemplazo de nombre primero omitiendo la
-r
opción.fuente
Una posible solución que no requiere instalar nada.
tar tvf
para tomar todos los archivos del tarballExtraiga esos archivos individualmente: tenga extracto de tar para stdout y redirija a $ filename
guardar como extract.sh y ejecutar como
extract.sh myfile.tar
. También sobrescribirá cualquier nombre de archivo duplicado encontrado en los directorios extraídos del tarball.fuente
La
-O
opción extrae un archivo a la salida estándar y>
redirige esa salida a un archivo. Entonces, en mi ejemplo, estoy extrayendo foo.mp3 y redirigiéndolo a bar.mp3. Los nombres de los archivos son arbitrarios.fuente