Tengo algunos directorios con un número variable de archivos y subdirectorios. Todos los archivos que no tienen extensiones tienen que ser tar
editados. Sus nombres pueden cambiar, por lo tanto no pueden ser codificados. Los subdirectorios también pueden contener un número no especificado de archivos y subdirectorios que no son relevantes y no deben incluirse en el archivo.
Me gustaría poder hacer esto con una sola línea, sin usar ningún .sh
script, para que este proceso se pueda reproducir de la manera más portátil posible.
Estructura de directorio de muestra:
$ ls -1F
bar-dir/
bar.with.dots
foo-directory/
foo-no-ext
quux.dir/
quux.ext
El resultado tar
debe contener solo foo-no-ext
en este caso.
Lo más cerca que he llegado hasta aquí es
tar -cf archive.tar --exclude=*.* --no-recursion *
Pero, cuando se ejecuta en el conjunto de muestra, el archive.tar
todavía incluye los subdirectorios (aunque estén vacíos):
$ tar -tf archive.tar
bar-dir/
foo-directory/
foo-no-ext
bash
operl
es exactamente igual en todos los sistemas, aunquetar
puede ser GNU, BSD, Solaris tar ...Respuestas:
Este comando hace lo que quieres:
El
find
comando encuentra todos los archivos*
solo en el directorio actual-maxdepth 0
que son archivos-type f
(no directorios, dispositivos u otros archivos especiales). Los archivos resultantes se pasan a tar, que excluye los nombres que contienen un punto.fuente
find ... | tar -T - ...
Sería algo mejor.-type f
menos que desee encontrar también enlaces, enchufes, tuberías y nodos de dispositivos.Qué tal si:
No espera mucho del shell, pero suponga que existe grep (nunca he visto un sistema sin él).
fuente