Linux shell: Bestimmte Werte eines Verzeichnisses anzeigen lassen?

...komplette Frage anzeigen

2 Antworten

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"
Antwort bewerten Vielen Dank für Deine Bewertung
flollie 13.04.2016, 11:58

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/

0
ralphdieter 13.04.2016, 14:24
@flollie

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"
1
flollie 13.04.2016, 14:35
@ralphdieter

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!

0
TeeTier 13.04.2016, 12:06

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. :)

1

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 bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?