Frage von flollie, 76

Linux shell: Bestimmte Werte eines Verzeichnisses anzeigen lassen?

Hallo! Ich suche eine Loesung, wie ich in shell folgendes von einem Verzeichnis anzeigen lassen kann: Pfad, Datei, Dateigröße, letztes Änderungsdatum, letzter Zugriff.

Mit ls -l PFAD kann ich mir alles anzeigen lassen, aber wie mache ich die gewuenschte Reihenfolge? Am besten auch "Pfad, Datei, Dateigröße, letztes Änderungsdatum, letzter Zugriff" als Spaltenbezeichnung.

Danke!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von ralphdieter, 30

stat ist Dein Freund:

echo "Pfad, Datei, Größe, Änderung, Zugriff"
stat --format="$PWD, %n, %s, %y, %x" *

Brauchst Du statt "*" genauere Kontrolle zur Datei-Auswahl, hilft find:

find . -maxdepth 1 -printf "%h, %f, %a, %t\n"
Kommentar von flollie ,

Danke schoen! Den Befehl kannte ich nicht. Aber es wird zu "durcheinander angezeigt". Ich haette es gerne so:

drwxr-x--- 5 owner group 1024 Dec 23 1999 install/

Kommentar von ralphdieter ,

Huh? Ich bin verwirrt. Das ist doch jetzt einfach nur ls -l. In der Frage wolltest Du doch eine andere Reihenfolge, kommagetrennt und mit Änderungs- und Zugriffsdatum.

Dein "Durcheinander" kommt womöglich nur von den langen Zeitangaben auf einem schmalen Terminal. Bei find kannst Du das Zeit-Format frei festlegen, etwa mit "%AD %AT" statt "%a" (entsprechend für %t — siehe man-page). Die vielen Nachkommastellen bei den Sekunden kannst Du durch Angabe einer Feldbreite abschneiden ("%.8TT").

Und übersichtlicher wird es auch, wenn Du die Spalten mit variabler Breite zuletzt ausgibst. Probier mal:

find . -maxdepth 1 -printf "%AD %TD %p\n"

Deine neue Ausgabe könnte man (statt mit ls -l) auch so erhalten:

find . -maxdepth 1 -printf "%M %u %g %5s %Ta %Td %TY %f\n"
Kommentar von flollie ,

Ich bin auch etwas erwirrt. Sorry...ich wollte damit darstellen, dass es ordentlich untereinander gelistet wird. Also Spalte fuer Spalte wie bei ls -l.

Wenn ich das mit stat mache, dann haengt sich eine Info nach der anderen direkt hinten ran. Bei vielen Dateien/Verzeichnissen ist es dann sehr unuebersichtlich.

Aber mit dienen Erklaerungen komme ich jetzt weiter.

Vielen Dank!

Kommentar von TeeTier ,

Sehr schick! ;)

Kleine Anmerkung: Die Variante mit "find" ist bei Verzeichnissen mit vielen Dateien viiieeeel effizienter. Aber die Methode mit stat gefällt mir trotzdem. :)

Antwort
von Linuxhase, 8

Hallo

Ich suche eine Loesung, wie ich in shell folgendes von einem Verzeichnis
anzeigen lassen kann: Pfad, Datei, Dateigröße, letztes Änderungsdatum,
letzter Zugriff.

So in etwa?:

#!/bin/bash
PERMS=$(ls -l|head|tail -n1|awk '{print $1}')
VAR1=$(ls -l|head|tail -n1|awk '{print $2}')
USER=$(ls -l|head|tail -n1|awk '{print $3}')
GROUP=$(ls -l|head|tail -n1|awk '{print $4}')
SIZE=$(ls -l|head|tail -n1|awk '{print $5}')
MONTH=$(ls -l|head|tail -n1|awk '{print $6}')
DAY=$(ls -l|head|tail -n1|awk '{print $7}')
TIME=$(ls -l|head|tail -n1|awk '{print $8}')
NAME=$(ls -l|head|tail -n1|awk '{print $9}')

NAME2=$(for i in $(ls -l 28.Spieltag.txt|awk '{print $9}'); do stat $i|head -n1|awk '{print $2}'|sed 's/’//g'|sed 's/‘//g';done)
LMODY=$(for i in $(ls -l 28.Spieltag.txt|awk '{print $9}'); do stat $i|tail -n3|head -n1|awk '{print $2}';done)
LTOUCH=$(for i in $(ls -l 28.Spieltag.txt|awk '{print $9}'); do stat $i|tail -n4|head -n1|awk '{print $2}';done)
echo $NAME $SIZE $TIME
echo "------ 'Nur mit stat' ------"
echo $NAME2 $LMODY $LTOUCH

Hier im Beispiel nur für eine Datei, musst Du in eine Schleife packen wenn Du eine Liste abarbeiten willst. Welche Werte Du nun brauchst kannst Du ja aus den Variablen nehmen.

aber wie mache ich die gewuenschte Reihenfolge?

Indem Du die entsprechende Variable dann aufrufst wenn Du sie brauchst.

Den Pfad kriegst Du am einfachsten mit find heraus.

Linuxhase

Antwort
von DrStrosmajer, 54

Midnight commander.

Kommentar von flollie ,

Ich brauche kein tool, sondern ein Script. Trotzdem Danke!

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten