Wie würde ich alle Verzeichnisse auflisten, die dies nicht tun Haben Sie eine Datei mit einem bestimmten Dateinamen darin? z.B. diesem Baum gegeben
/
/a
README
file001
file002
/b
README
file001
/c
file003
Ich möchte die Verzeichnisse auflisten, die dies nicht tun haben eine Datei namens README
, in diesem Fall wäre es das Verzeichnis /c
. Wie würde ich das machen? Mir fällt keine Syntax ein, die z. find
.
Akzeptierte Antwort:
Angenommen ein find
Implementierung wie GNU find
der einen {}
akzeptiert eingebettet in ein Argument für -exec
:
$ find . -type d ! -exec test -e '{}/README' ; -print
oder, ohne die problematische Einbettung:
$ find . -type d ! -exec sh -c 'test -e "$1"/README' sh {} ; -print
Beispiel
Hier haben die Verzeichnisse 1/1 bis 5/5 eine README, die anderen Verzeichnisse sind leer.
$ 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
Wenn wir nun diese Version unseres find
ausführen Befehl:
$ 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
Referenzen
- Verzeichnisse in der Suche ausschließen, die keinen bestimmten Dateinamen enthalten?