Wie man richtig grep Dateinamen nur aus ls -al
Wie sage ich grep nur ausdrucken Zeilen, wenn der "Dateiname" entspricht, wenn ich mich Rohrleitungen durch ls? Ich will es ignorieren, alles auf jeder Linie, bis nach dem Zeitstempel. Es muss einen einfachen Weg, dies zu tun auf einem einzigen Befehl.
Wie Sie sehen können, ohne es, wenn ich auf die Suche nach der Datei "rwx", würde es wieder nicht nur die Zeile mit rwx.c, aber auch die ersten drei Zeilen wegen der Berechtigungen. Ich wollte mit AWK, aber ich möchte es zur Anzeige des ganzen letzten Zeile, wenn ich Suche nach "rwx".
Irgendwelche Ideen?
EDIT: Danke für die hacks unten. Es wäre jedoch zu groß sein, um eine weitere bug-freie Methode. Zum Beispiel, wenn ich eine Datei mit dem Namen "rob-rob", ich wäre nicht in der Lage, um verwenden Sie die angegebenen Lösungen.
drwxrwxr-x 2 rob rob 4096 2012-03-04 18:03 .
drwxrwxr-x 4 rob rob 4096 2012-03-04 12:38 ..
-rwxrwxr-x 1 rob rob 13783 2012-03-04 18:03 a.out
-rw-rw-r-- 1 rob rob 4294 2012-03-04 18:02 function1.c
-rw-rw-r-- 1 rob rob 273 2012-03-04 12:54 function1.c~
-rw-rw-r-- 1 rob rob 16 2012-03-04 18:02 rwx.c
-rw-rw-r-- 1 rob rob 16 2012-03-04 18:02 rob rob
ls -al
; benutzen Sie einfach ls -a
zu Holen Sie sich die interessante Namen, und dann ls -ld
um die details für Sie? Parsen der Ausgabe von ls
ist notorisch schwierig, sogar bevor Sie versuchen, Sie denken über Dateinamen, der Leerzeichen enthält. Die gute Nachricht: auch das Datum-Formate ändern, die Anzahl der Spalten in der Zeit konstant bleibt (zwei Leerzeichen getrennte Werte).Ich Stimme mit Jonathan ; wenn alles, was Sie zu tun versuchen, ist eine Liste von Dateien, dann übergeben Sie die richtigen Optionen für ls.
Eigentlich ist mein Kommentar zu der date-Spalten ist nicht ganz korrekt; Ihre
ls -l
ist die Anzeige von zwei Spalten; mir zeigt die drei letzten Dateien: -r--r--r-- 1 jleffler staff 26676 Mar 3 21:44 ccs.nmd
und alte Dateien -r--r--r-- 1 jleffler staff 6510 Mar 17 2003 README,v
.InformationsquelleAutor mathjacks | 2012-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum gehst du nicht mit grep und entsprechen den Namen der Datei nach dem Zeitstempel?
Den
[0-9]{2}:[0-9]{2}
ist für die Zeit, die$FILENAME
ist, wo würden Sie setzenrob rob
oderrwx
, und die nachfolgende(\.[a-zA-Z0-9]+)?
ist eine optionale Erweiterung.Bearbeiten: @JonathanLeffler unten weist darauf hin, dass Dateien, die älter als bout 6 Monate die Spalte "Zeit" wird abgelöst von einem Jahr - dies ist, was passiert auf meinem Rechner jedenfalls. Sie konnte tun
([0-9]{2}:[0-9]{2}|(19|20)[0-9]{2})
um die Zeit, ODER ein Jahr, aber Sie kann am besten mit awk (?).(Man könnte noch zusätzlich zu verlängern, um das matching der ganzen Linie, wenn Sie wollte:
. Sie erhalten den Punkt, maßgeschneidert auf Ihre Bedürfnisse.)
ls -l
Liste verliert die Zeit und Gewinne im Jahr, wenn die Datei älter als etwa 6 Monate alt.:S danke für den pickup. und ich merke, dass mein Datumsformat ist anders zu OP ' s auch - hoffentlich bleibt konstant genug, für eine bestimmte Maschine?
genial, das ist toll, ich Lerne über die Formatierung zu. Dank
InformationsquelleAutor mathematical.coffee
Nachfolgend werden nur die Datei-Namen und einer Datei, in jeder Zeile.
Enthalten . Dateien
Bitte beachten Sie, dass das argument ist Zahl "1", nicht Buchstabe "l".
InformationsquelleAutor James
Vorausgesetzt, Sie sind nicht bereit, das zu tun:
dann werden Sie brauchen, um die Tatsache, dass es 8 Spalten mit Leerzeichen Trennung, bevor der Dateiname beginnt. Mit
egrep
(odergrep -E
), Sie tun können:Das sieht für 'rwx' nach der 8. Spalte. Wenn Sie möchten, dass der name zum start mit
rwx
weglassen.*
. Wenn Sie möchten, dass die Namen am Ende mitrwx
, fügen Sie ein $ am Ende. Beachten Sie, dass ich doppelte Anführungszeichen verwendet, so könnte man interpolieren eine variable an die Stelle der wörtlichenrwx
.Getestet wurde dies unter Mac OS X 10.7.3; die
ls -l
Befehl konsequent gibt drei Spalten für das Datum-Feld:Ihre
ls -l
zu sein scheint, geben nur zwei Spalten, so müssten Sie ändern, die{8}
zu{7}
für Ihre Maschine - und hüten Sie sich vor der Migration zwischen den Systemen.InformationsquelleAutor Jonathan Leffler
Gut, wenn Sie arbeiten mit Dateinamen, die keine Leerzeichen in Ihnen, Sie konnten etwas wie das hier tun:
Es entspricht "rwx gefolgt von beliebig vielen nicht-Leerzeichen, gefolgt von dem Ende einer Zeile". Es ist nicht wirklich eine gute alternative für Dateinamen mit Leerzeichen, denn dann gibt es keine Möglichkeit zu unterscheiden, die Pause zwischen der Uhrzeit und dem Dateinamen, im Vergleich zu einem Teil des Dateinamens.
InformationsquelleAutor Amber
Beiseite frrm die Tatsache, dass Sie können verwenden Sie pattern-matching mit ls, stehen im Beispiel ksh und bash
das ist wahrscheinlich das, was Sie tun sollten, die Sie verwenden können, die Tatsache, dass mit dem Namen auftreten, in einer
Feste position. awk (gawk, nawk oder whaever Sie haben) ist eine bessere Wahl für diese.
Wenn Sie haben, um mit grep-es riecht nach Hausaufgaben zu mir. Kennzeichnen Sie bitte das es so ist.
Davon ausgehen, das mit dem Namen Ausgangsposition basiert auf dieser Ausgabe von ls -l unter linux: 56
z.B.,
finden von Dateien, beginnend mit "val"
InformationsquelleAutor jim mcnamara
Als einen einfachen hack, fügen Sie einfach ein Leerzeichen vor den Dateinamen, so dass Sie nicht den Anfang der Ausgabe:
Edit: OK, das ist nicht so robust, wie es sein sollte. Hier ist awk:
def
im Besitz vonrwx
(Benutzer oder Gruppe). Und wäre es nicht abholen eine Dateiabcrwx
es sei denn, Sie angegeben die 'abc' in das Muster.Guter Punkt, um die Benutzer-und Gruppen. Ich denke, eine richtige regex ist wirklich in Ordnung hier.
InformationsquelleAutor Greg Inozemtsev
Dies funktioniert für mich, im Gegensatz zu ls -l & andere, wie einige Leute darauf hingewiesen. Ich mag das, weil die wirklich generische & gibt mir die base file name, was entfernt den Pfad-und Dateinamen, bevor Sie die Datei.
InformationsquelleAutor ekta
Nur ein Befehl, den Sie brauchte für diese -
InformationsquelleAutor Bharat
Diese:
InformationsquelleAutor Gio Italy