Wie kann ich ein Skript rekursiv in einem Verzeichnis ausführen

Wie kann ich ein Skript rekursiv in einem Verzeichnis ausführen

Ich verwende den folgenden Code zum Dekodieren von JPEG-komprimierten DICOMs.

find ./* -maxdepth 0 -name '*.dcm' -printf 'dcmdjpeg %p %p \n' | sh

Ich führe diesen Code in jedem Ordner aus, der diese Dateien enthält.

Das Problem besteht darin, dass ich einen übergeordneten Ordner und eine Liste von Unterordnern innerhalb dieses übergeordneten Ordners habe. Jeder Unterordner enthält mindestens 2000 DICOM-Dateien. Wie kann ich diesen Code einmal im übergeordneten Ordner anwenden, damit er gleichzeitig in allen Unterordnern ausgeführt wird?

Antwort1

Der findBefehl hat dafür einen Schalter. Er heißt -exec.

$ find . -name '*.dcm' -exec dcmdjpeg {} {} \;

Dadurch werden die von gefundenen Dateinamen findan den Stellen ersetzt, an denen sie vorkommen {}. Im obigen Beispiel werden wir dies also für jeden Dateinamen tun.

dcmdjpeg file1.dcm file1.dcm
dcmdjpeg file2.dcm file2.dcm
...

Wenn Ihre Dateinamen Leerzeichen enthalten, können Sie diese Methode verwenden:

$ find . -name '*.dcm' -exec dcmdjpeg "{}" "{}" \;

Sehen, was passiert

dcmdjpegSie können den Befehl durch den Befehl ersetzen echound das obige ausführen, um die Dateinamen anzuzeigen, die ausgeführt werden.

Beispiel

Angenommen, ich hätte diese Beispieldaten.

$ tree
.
|-- 1
|   |-- 1.dcm
|   |-- 1\ space.dcm
|   |-- 2.dcm
|   `-- 3.dcm
|-- 1.dcm
|-- 2
|   |-- 1.dcm
|   |-- 1\ space.dcm
|   |-- 2.dcm
|   `-- 3.dcm
|-- 2.dcm
|-- 3
|   |-- 1.dcm
|   |-- 1\ space.dcm
|   |-- 2.dcm
|   `-- 3.dcm
`-- 3.dcm

Und jetzt führen wir das zweite Beispiel aus, das Leerzeichen in Dateinamen verarbeitet:

$ find . -name '*.dcm' -exec echo "{}" "{}" \;
./2.dcm ./2.dcm
./1/2.dcm ./1/2.dcm
./1/3.dcm ./1/3.dcm
./1/1 space.dcm ./1/1 space.dcm
./1/1.dcm ./1/1.dcm
./3.dcm ./3.dcm
./1.dcm ./1.dcm
./2/2.dcm ./2/2.dcm
./2/3.dcm ./2/3.dcm
./2/1 space.dcm ./2/1 space.dcm
./2/1.dcm ./2/1.dcm
./3/2.dcm ./3/2.dcm
./3/3.dcm ./3/3.dcm
./3/1 space.dcm ./3/1 space.dcm
./3/1.dcm ./3/1.dcm

Oben können Sie sehen, dass Dateinamen pro gefundener Datei zweimal ausgegeben werden.

verwandte Informationen