¿Cómo entraría en la lista de todos los directorios que no tiene un archivo con un nombre de archivo dado dentro? p.ej. dado este árbol
/
/a
README
file001
file002
/b
README
file001
/c
file003
Quiero enumerar los directorios que no tener un archivo llamado README
, en este caso sería el directorio /c
. ¿Como podría hacerlo? No puedo pensar en ninguna sintaxis usando, p. find
.
Respuesta aceptada:
Asumiendo un find
implementación como GNU find
que acepta un {}
incrustado en un argumento para -exec
:
$ find . -type d ! -exec test -e '{}/README' ; -print
o, sin la incrustación problemática:
$ find . -type d ! -exec sh -c 'test -e "$1"/README' sh {} ; -print
Ejemplo
Aquí los directorios 1/1 a 5/5 tienen un LÉAME, los otros directorios están vacíos.
$ tree
.
|-- 1
| `-- 1
| `-- README
|-- 10
| `-- 10
|-- 2
| `-- 2
| `-- README
|-- 3
| `-- 3
| `-- README
|-- 4
| `-- 4
| `-- README
|-- 5
| `-- 5
| `-- README
|-- 6
| `-- 6
|-- 7
| `-- 7
|-- 8
| `-- 8
`-- 9
`-- 9
Ahora, cuando ejecutamos esta versión de nuestro find
comando:
$ find . -type d ! -exec test -e '{}/README' ; -print
.
./10
./10/10
./7
./7/7
./9
./9/9
./6
./6/6
./5
./8
./8/8
./4
./1
./3
./2
Referencias
- ¿Excluir directorios en find que no contengan un nombre de archivo específico?