2016-11-23 1 views
0

Ich habe ein Problem mit einem Grep-Befehl. Ich habe 3 Aufgaben:Wie kann ich grep, um Ergebnisse von ls zu filtern?

a) finden und zeigen nur dir das für "ls -l"

ls -l | grep ^d # which works good 

b) nur Dateien, die mit einer Ziffer beginnt Namen

ls | grep ^[0-9] 

funktioniert auch, aber Für Dateien und Verzeichnisse muss es nur für Dateien funktionieren, wie kann ich das machen?

c) Dateien, die ein "x" rechts für Gruppen

ls -l | grep "^-*x" # it shows every file 

Wie ich diese Befehle für b machen) und c) funktioniert haben?

+5

Parsing 'ls' ist eine schlechte Idee dafür. Verwenden Sie den 'find' Befehl. – anubhava

+4

... siehe [Warum sollten Sie die Ausgabe von 'ls' nicht analysieren (http://mywiki.wooledge.org/ParsingLs) im Wooledge-Wiki und [UsingFind] (http: //mywiki.wooledge. org/UsingFind). –

Antwort

1

a) finden und zeigt nur dir das für "ls -l"

find . -maxdepth 1 -mindepth 1 -type d -exec ls -l {} \; 

b) nur Dateien, die Namen beginnen mit einer Ziffer

find . -maxdepth 1 -type f -name "[0-9]*" 

c) Dateien, die ein "x" haben rechts für Gruppen

find . -maxdepth 1 -type f -perm /g+x 
+1

Heh. Ich habe das nur selbst beantwortet, weil ich mir Sorgen machte, dass es andere Antworten geben würde, die versuchen, den wörtlichen Ansatz zu nehmen. Anscheinend hätte ich mir keine Sorgen machen müssen. Das heißt, wie derzeit mit "-regex" implementiert, ist (b) unnötig inkompatibel (erfordert GNU-Erweiterungen zum "Finden") und passt auf jede Datei, wenn sie sich in einem Verzeichnis befindet, das mit einer Ziffer beginnt. –

+1

@CharlesDuffy hat die Antwort aktualisiert :) – ritesht93

+0

Wenn Sie die Aktion '-ls' hinzufügen, erhalten Sie die gleiche Ausgabe wie 'ls -l'. –

Verwandte Themen