Probablemente pueda escribir un script de shell para buscar solo archivos, luego pasar la lista a tar, pero me pregunto si ya hay una característica incorporada en tar que permita hacer eso, en una sola línea de comando.
Por ejemplo, encontré el --no-recursioninterruptor, pero cuando lo hago:
tar --no-recursion -cvf mydir.tar mydir
Solo archiva los nombres de las entradas en el directorio (¡incluidos los subdirectorios!), Pero no archiva ningún archivo.
También probé:
tar --no-recursion -cvf mydir.tar mydir/*
Pero aunque solo archiva archivos, también archiva los nombres de los subdirectorios.
¿Hay alguna manera de decirle a los archivos tar solamente, sin directorios?

find mydir -type f |xargs cp -t tempdiry luego tar tempdir.find mydir -depth 1 -type f | xargs tar cf mydir.tarfind mydir -maxdepth 1 -type f -exec tar cvf mydir.tar {} +. El+pone todos los archivos en la misma línea de comando como xargs.Respuestas:
Como señala Camh, el comando anterior tenía un pequeño problema en el sentido de que dado demasiados nombres de archivo, se ejecutaría más de una vez, con invocaciones posteriores que borraban silenciosamente las ejecuciones anteriores. Como tampoco estamos comprimiendo, podemos agregar en lugar de sobrescribir:
La respuesta de Iocnarz de usar
tar's--nully-Topciones también funciona. Si lo hacpioinstalado, la respuesta de Camh al usarlo también está bien. Y si tienezshy no le importa usarlo para un comando, la respuesta de Gilles usando un zsh glob (*(.)) parece la más sencilla.La clave era la
-maxdepthopción. Respuesta final, lidiando con espacios adecuadamenteEsto también debería funcionar:
fuente
tar. Ambosxargsyfindcon la+variante tienen un número máximo de argumentos que se pueden pasar a tar. Esto dará como resultado que la segunda invocación de tar sobrescriba la salida de la primera.-xpara forzar a los xargs a fallar en lugar de perder datos, y aunque es mejor que un error de pérdida de datos silencioso, aún no es ideal. Este error de clasificación es muy peligroso porque todo parece estar bien al principio, pero a medida que la lista de archivos crece con el tiempo, comienzas a activarlo y es posible que no lo notes hasta que intentes restaurar tu copia de seguridad. Entonces es muy tarde.Cuando quiera usar
findcontar, la mejor manera es usar encpiolugar detar.cpiopuede escribir archivos tar y está diseñado para tomar la lista de archivos para archivar desde stdin.El uso de
findycpioes un enfoque más unix-y en el que permitefindhacer la selección de archivos con toda la potencia que tiene, y permitecpiorealizar el archivo. Vale la pena aprender este uso simplecpio, ya que le resulta fácil resolver los problemas con los que golpea su ventaja cuando lo intentatar.fuente
-maxdepthantes-type.No estoy seguro de entender sus requisitos. Si desea almacenar los archivos regulares
mydirpero no sus subdirectorios, la forma más fácil es usar zsh, donde solo los archivos regulares coincidentes son la simple cuestión de usar el.calificador glob :fuente
Incluso puede usar
find ... -print0ytar ... --nulldirectamente sin usarxargsen absoluto.En el ejemplo dado, la
--no-recursionopción atarno es necesaria porque solo las rutas de los archivos (y no los directorios) se pasarán defindatar.Sin embargo, el uso de la
--no-recursionopcióntaren el siguiente ejemplo evita eltardoble archivo de directorios.findhará la recursión del árbol de directorios en lugar detarentonces.fuente
Como
man tardice el párrafo introductorio en (última oración),Lo cual entiendo como un "no" a su pregunta.
fuente
--no-recursion. Ej .--exclude-tag, Etc.). Estoy investigando lo--exclude-tagque parece prometedor, pero parece ser exactamente lo contrario de lo que estoy buscando.Omita
-C startdiry reemplace.constartdirsi debería aparecer en el archivo.Este es el método más eficiente basado en las características de libfind. Libfind también ofrece primarios
-chown-chgrp-chmodque modifican las estadísticas de estructura en su lugar y permiten archivar diferentes metadatos. Esto también funciona en modo de lista y extracción y evita la necesidad de extraer todo el archivo en muchos casos.fuente
-finden-copymodo? La sinopsis de la página de manual sugiere que puede hacerlo, pero no he podido hacerlo funcionar (al intentar responder Cómo copiar archivos modificados mientras se preserva la estructura de carpetas ) (con schily-2016-02-10)star -find.Podría haber encontrado una solución.
find mydir -type f -printf '%P\0'|tar czvf mydir.tar.gz -C mydir --null -T -Esto puede ser un poco costoso, pero de todos modos funcionará, porque esto no depende de los xargs.
fuente
dir = your_dir; cd $ dir; tar -cvf file.tar `buscar. -maxdepth 1 -type f -print`
fuente