xubuntufriese schrieb:
rklm schrieb:
ls
in solchen Fällen zu benutzen ist nicht so gut, da es seine eigene Formatierung mitbringt.
Das Argument verstehe ich nicht. Meinst Du falls sich das Ausgabeformat von ls einmal ändern sollte?
Genau. Oder auch, weil das Ausgabeformat durch die Umgebung geändert werden kann. ls
ist dazu da, Dateilisten für den Menschen lesbar auszugeben, aber nicht dafür, sie maschinell weiter zu verarbeiten.
Kann $newest_file" nun nicht auch ein Verzeichnis sein?
Das kann alles mögliche sein. Es kann auch sein, dass das gegebene Verzeichnis leer ist. Beides kann man durch kleine Änderungen erkennen / verhindern:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | dir="/Pfad_Zu_Dem_Verzeichnis"
# init timestamp
newest_time=0
unset newest_file
for f in "$dir"/*; do
if [ -f "$f" ]; then
# ts is seconds since the epoch of modification time
ts=$(stat -c '%Y' "$f")
if [ $ts -ge $newest_time ]; then
newest_time=$ts
newest_file="$f"
fi
fi
done
# newest_file now contains the path of the newest file or nothing
if [ -n "$newest_file" ]; then
number=$(echo "$newest_file" | egrep -o '[[:digit:]]+')
else
echo "ERROR: no file found in $dir" >&2
fi
|
Ich habe angenommen, dass in dem Verzeichnis nur gewünschte Dateien vorhanden sind, weil auch dir ursprüngliche Lösung nicht gefiltert hat. Außerdem wollte es nicht gleich zu kompliziert machen. Man kann sich natürlich noch mehr Tests vorstellen z.B. um zu erkennen, dass tatsächlich Ziffern im Dateinamen vorhanden sind.
Ist
ZAHL=$(ls -ltr | egrep '^-' | tail -1 | egrep -o ' [0-9]+[^0-9]*$' | egrep -o '[0-9]+')
nicht doch einfacher?
Es ist ein wenig effizienter, ls -lt
und head -1
zu nehmen. "Einfach" und "robust" widersprechen sich halt oft. Und Geschmäcker sind natürlich verschieden... ☺