Tengo algunos directorios con un número variable de archivos y subdirectorios. Todos los archivos que no tienen extensiones tienen que ser tareditados. 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 .shscript, 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 tardebe contener solo foo-no-exten 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.tartodavía incluye los subdirectorios (aunque estén vacíos):
$ tar -tf archive.tar
bar-dir/
foo-directory/
foo-no-ext

bashoperles exactamente igual en todos los sistemas, aunquetarpuede ser GNU, BSD, Solaris tar ...Respuestas:
Este comando hace lo que quieres:
El
findcomando encuentra todos los archivos*solo en el directorio actual-maxdepth 0que 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 fmenos 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