Verwendung des Befehls ls mit cd rekursiv

4

Ich habe eine Anforderung, bei der ich die verschachtelte Ordnerstruktur überprüfen muss.

Bsp .: Ich habe 3 Ordner: test1, test2, test3 (Praktisch kann es eine beliebige Anzahl solcher Ordner geben). Jetzt sollten alle diese Ordner Ordner wie V1, V2 ... enthalten ('V' gefolgt von einer Nummer). Unter diesem Ordner (V1 ...) sollten sich nur zwei Ordner mit den Namen "dummy1" und "dummy2" befinden.

Also sollten alle diese Prüfungen rekursiv durchgeführt werden, bis alle Ordner wie Test 1 ... Test2 ... geprüft sind.

Ankit
quelle

Antworten:

3

Du könntest das benutzen finden Befehl. Suchen von Rekursionen über eine Verzeichnisstruktur, die die einzelnen Dateien / Verzeichnisse bearbeitet. Sie können es auf Verzeichnisse mit dem Flag -type beschränken.

find start_dir -type d -print

Um tatsächlich zu validieren, müssen alle die Struktur haben, die ich denke, Sie müssen ein Skript schreiben, das sich diese Liste ansieht - und ich denke, Sie müssten dies in einer leistungsfähigeren Skriptsprache als Shell tun, z. Perl, Python, Ruby, Tcl.

Mark
quelle
Ich bin damit einverstanden, aber die Anforderung bezieht sich nur auf Shell-Skripte. Wenn möglich, können Sie mir bitte sagen, nachdem Sie das Verzeichnis gefunden haben, in dem der Befehl cd rekursiv verwendet wird
Ankit
Dieser Befehl listet alle Verzeichnisse auf, sodass keine erneute Verwendung mehr erforderlich ist. Sie müssen dann die Ausgabe verarbeiten - warum nur ein Shell-Skript als künstliche Grenze - mehr als zwei Zeilen in der Shell, die ich in etwas anderes schreibe.
Mark
Kannst du mir dabei helfen, indem du es auf ein anderes Skriptwerkzeug schreibst? Vorausgesetzt, ich kann es auf Putty ausführen?
Ankit
1

Eine andere Möglichkeit ist die einfache Baum Befehl.

Mach einfach

tree directory/

dann 'validiere' die Ausgabe davon.

PriceChild
quelle
Kannst du mir bitte sagen, wie ich das rekursiv validieren soll?
Ankit
Oh, dann denke ich, dass ein Haufen Bash "für Schleifen" mit verschiedenen Tests das ist, was Sie wollen, wenn die Validierung automatisch durchgeführt werden soll. Ich weiß nicht, wie streng du die Dinge willst? Kann test1 NUR V {1..X} enthalten oder ist eine Datei 'readme.txt' dort auch zulässig usw. usw.?
PriceChild
Nun, es wird nur V enthalten (1..X)
Ankit
Aber was ist dann mit fortlaufenden Nummern ... können Sie V1, V2, V5, V9000 usw. haben? Ihre Frage gefällt mir leider nicht, es ist eigentlich keine Frage, sondern eine Aufforderung an uns, Ihre Arbeit zu erledigen und Ihnen ein Skript zu schreiben. Die Verwendung von Standard-Bash-Schleifen wie 'for' und 'if' sollte dies relativ einfach machen.
PriceChild
1

positiver Test:

find test* -maxdepth 1 -type d -regex ".*/V[0-9]+" 
find test* -mindepth 2 -maxdepth 2 -type d -regex ".*/V[0-9]+/dummy[12]" 

negativer Test:

find test* -maxdepth 1 -type d -not -regex ".*/V[0-9]+" 
find test* -mindepth 2 -maxdepth 2 -type d -not -regex ".*/V[0-9]+/dummy[12]" 
user unknown
quelle
Vielen Dank für Ihre Hilfe. Es hat auf diese Weise funktioniert. Was ist, wenn ich die Ergebnisse in einer Datei speichern möchte. Vielen Dank, ANkit
Ankit
Finde Test * -Max.Tiefe 1-Typ d-Regex. * / V [0-9] + & gt; list1
user unknown
Ja, ich habe das Gleiche getan, wie "find test * -maxdepth 1 -type d -regex". * / V [0-9] + "-print & gt; Dateiname.....
Ankit
0

Versuchen Sie es mit dem folgenden Befehl:

find . -name dummy1 -exec echo "Hello, '{}'" \;
find . -name dummy2 -exec echo "Hello, '{}'" \;

Dies ergibt die Ausgabe zusammen mit der PWD.

Srinidhi
quelle