2016-07-12 21 views
0

In meinem Bash-Skript Ich brauche den Inhalt eines Ordners zu überprüfen, aber sein Weg mit Baum verschiedenen „Endungen“Drucken Inhalt eines Ordners mit einem variablen Pfad in BASH

zunächst mein Ordner geändert werden soll:

/home/myuser/my_folder 

Dann kann ein Benutzer den Namen meines Ordner mit Baum possibile Endungen ändern

/home/myuser/my_folder_aaaa 
/home/myuser/my_folder_bbbb 
/home/myuser/my_folder_cccc 

So kann ein Benutzer hinzufügen "_aaaa" oder "_bbbb" "_cccc"

Diese Suffixe sind bekannt.

In meinem Bash-Skript, wie kann ich mit "ls" den Inhalt meines Ordners überprüfen, auch wenn jemand den Namen ändert? NB: Ich brauche nur diesen Ordner überprüfen, so dass, wenn es einen Ordner „/ home/myuser/my_folder_ssss“ darf nicht übereinstimmen und die Inhalte angezeigt werden, dürfen nicht

Antwort

0

genannt wird, scheint, dass Sie so etwas wie dieses benötigen:

ls -1 | egrep "^my_folder(|_aaaa|_bbbb|_cccc)$" 

Dieser Befehl gibt den Namen des angegebenen Ordners aus, falls vorhanden.

ls -1 druckt alle Elementnamen innerhalb des Verzeichnisses pro Zeile.

egrep überprüft, ob der Name des Elements entspricht zu my_folder oder my_folder_aaaa, my_folder_bbbb, my_folder_cccc.

Dann können Sie mit diesem Namen machen, was Sie wollen. Zum Beispiel können Sie den Inhalt mit überprüfen:

ls -l `ls -1 | egrep "^my_folder(|_aaaa|_bbbb|_cccc)$"` 
+0

Wie kann ich den aktuellen vollständigen Pfad abrufen? Da ich die vorgenommene Änderung nicht kenne, wie kann ich in einer Variablen den vollständigen neuen Pfad "speichern" (z. B./home/myuser/my_folder_bbbb)? Ich habe versucht, den Befehl "pwd" einzufügen, aber nichts .. – user3472065

+0

@ user3472065 Bitte überprüfen Sie dies: http: // Superuser.com/questions/202645/how-to-den-vollständigen-Pfad-einer-Datei-in-bash –

+0

Bitte sehen Sie: [Warum sollten Sie nicht die Ausgabe von ls (1)] parsen (http://mywiki.wooledge.org/ParsingLs) – andlrc

1

Wenn Sie den Ordnerinhalt angezeigt werden soll, und wenn die Liste der bekannten Suffixe nicht zu lang ist, geben einen Versuch dieses:

ls -d /home/myuser/my_folder/* /home/myuser/my_folder/.* /home/myuser/my_folder_aaaa/* /home/myuser/my_folder_aaaa/.* /home/myuser/my_folder_bbbb/* /home/myuser/my_folder_bbbb/.* /home/myuser/my_folder_cccc/* /home/myuser/my_folder_cccc/.* 2>/dev/null 

-d: Inhalt des Verzeichnisses nicht auflisten.

2>/dev/null: Umleitungsstandardfehler zu /dev/null; ls Fehlermeldungen über nicht vorhandene Verzeichnisse werden nicht angezeigt.

Beachten Sie, dass find in Skripts bevorzugt wird.

+0

Sie können auch 'setopt -s nullglob' verwenden, um nicht passende Globs auf nichts zu erweitern. – andlrc

2

können Sie reguläre Ausdrücke Prädikate verwenden in finden und ausführen ls wenn die Regex Spiele:

find /home/myuser/ -regex ".*/my_folder\(_aaaa\|_bbbb\|_cccc\)$" -exec ls "{}" ";" 
+0

Man könnte auch den ausführlicheren Ansatz verwenden, der in POSIX find beschrieben wird: 'find/home/myuser/\ (-name 'mein_ordner_aaaa' -o -name 'my_folder_bbbb' ... \) -exec ...' – andlrc

0

Im Folgenden werden die Ordner ls -l, die das Muster in Ihrer Beschreibung passen

ls /home/myuser/my_folder_* | grep "aaaa\|bbbb\|cccc" | while read x; do ls -l ${x:0:-1}; done 
+0

Bitte siehe: [Warum sollten Sie die Ausgabe von ls (1) nicht analysieren? ( – andlrc

+1

) Yup! Die Analyse der 'ls'-Ausgabe scheint eine schlechte Idee zu sein. Vielen Dank. – ViKiG