Wie führe ich einen Befehl aus, bei dem eine Datei gefunden wird?
Angenommen, ich habe ein Verzeichnis mit dem Namen testdir
:
$ ls -R testdir/
testdir/:
dir1 dir2 dir3 dir4 dir5
testdir/dir1:
doc1.pdf
testdir/dir2:
file1.txt
testdir/dir3:
doc2.pdf
testdir/dir4:
file2.txt
testdir/dir5:
doc5.pdf
Jetzt möchte ich eine Aktion ausführen (einen Befehl ausführen), bei der find
eine bestimmte Datei / ein bestimmter Dateityp gefunden wird. Lassen Sie mich zum Beispiel finden *.pdf
:
$ find . -name '*.pdf'
./testdir/dir3/doc2.pdf
./testdir/dir5/doc5.pdf
./testdir/dir1/doc1.pdf
Angenommen, ich möchte einen Befehl ausführen (z. B. touch file
), in dem der obige Befehl Dateien findet. Mit anderen Worten, ich möchte eine Datei mit dem Namen file
in jedem Verzeichnis erstellen, in dem mindestens eine .pdf
gefunden wurde, damit ich Folgendes erhalte:
$ ls -R testdir/
testdir/:
dir1 dir2 dir3 dir4 dir5
testdir/dir1:
doc1.pdf file
testdir/dir2:
file1.txt
testdir/dir3:
doc2.pdf file
testdir/dir4:
file2.txt
testdir/dir5:
doc5.pdf file
Wie mache ich eine solche Arbeit?
Kann für jede gefundene Datei sein, cd
wo Datei vorhanden ist und einen Befehl rekursiv ausführen.
Ich weiß, dass das find
eine großartige Funktion hat: -exec
aber ich kann es nicht zum Laufen bringen.
Dies ist nur ein Beispiel, um eine Vorstellung davon zu bekommen, was ich tun möchte. Allgemein: Wie führe ich einen Befehl aus, bei dem Dateien find
rekursiv gefunden werden?
-execdir
dazu.