Comment puis-je entrer dans la liste de tous les répertoires qui ne le font pas avoir un fichier avec un nom de fichier donné à l'intérieur ? par exemple. étant donné cet arbre
/
/a
README
file001
file002
/b
README
file001
/c
file003
Je veux lister les répertoires qui ne le font pas avoir un fichier nommé README
, dans ce cas ce serait le répertoire /c
. Comment ferais-je cela ? Je ne vois aucune syntaxe utilisant par exemple find
.
Réponse acceptée :
En supposant une find
implémentation comme GNU find
qui accepte un {}
intégré dans un argument de -exec
:
$ find . -type d ! -exec test -e '{}/README' ; -print
ou, sans l'intégration problématique :
$ find . -type d ! -exec sh -c 'test -e "$1"/README' sh {} ; -print
Exemple
Ici, les répertoires 1/1 à 5/5 ont un README, les autres répertoires sont vides.
$ 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
Maintenant, lorsque nous exécutons cette version de notre find
commande :
$ 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
Références
- Exclure les répertoires dans la recherche qui ne contiennent pas de nom de fichier spécifique ?