Bash-Befehl zum rekursiven Abrufen der ersten und letzten Datei aus jedem Ordner

Bash-Befehl zum rekursiven Abrufen der ersten und letzten Datei aus jedem Ordner

Ich habe ein Verzeichnis in

Mein Haupt-DIR ist/tmp/folder

Darin /tmp/folderbefinden sich nur eine X-Anzahl von Ordnern (keine Dateien). Zum Beispiel

/tmp/folder/1
/tmp/folder/2
/tmp/folder/3
/tmp/folder/4
/tmp/folder/5

In diesen Ordnern befinden sich viele Dateien mit derselben Erweiterung. Ich möchte aus jedem dieser Ordner die zuletzt und zuerst erstellten Dateien (Änderungszeit) abrufen.

Die Ausgabe sollte meiner Meinung nach so aussehen

/tmp/folder/1,OLD_FILE,NEW_FILE
/tmp/folder/2,OLD_FILE,NEW_FILE
/tmp/folder/3,OLD_FILE,NEW_FILE
/tmp/folder/4,OLD_FILE,NEW_FILE
/tmp/folder/5,OLD_FILE,NEW_FILE

Ich werde diese Ausgabe mithilfe eines Skripts analysieren, Sie können also jede gewünschte Ausgabe erstellen. Bitte tun Sie dies jedoch auf benutzerfreundliche Weise, damit ich sie problemlos analysieren kann.

Der Bash-Befehl sollte nur 1 sein

Antwort1

find "$DIR" -type d | while read d; do echo "$d,$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')"; done

Oder in einem besser lesbaren Format und unter Verwendung einer zusätzlichen Variablen zur Demonstration:

find "$DIR" -type d |
while read d;
do
    files=$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')
    printf '%s,%s\n' "$d" "$files";
done

Dadurch werden alle Unterverzeichnisse gefunden, die mit $DIRdem findBefehl aufgerufen wurden. Für jedes gefundene Verzeichnis wird ls -treine Liste der Dateien in diesem Verzeichnis angezeigt, sortiert nach Datum (die neusten zuerst).

Die Ausgabe von „pipe“ ls -trin „ sedverbindet die erste und letzte Zeile mit einem Komma“: Option -nunterdrückt die Standardausgabe, 1hspeichert die erste Zeile (neuester Dateiname) in derLeertaste gedrückt halten, und hängt in der letzten Zeile der Datei (ausgewählt durch $) den Haltebereich (neuester Dateiname) an Hden Musterbereich (durch eine neue Zeile getrennt) an und ändert diese neue Zeile in ein Komma.

Das Skript printfgibt dann den Namen des Unterverzeichnisses ein, gefolgt von einem Komma und den Dateien, die daraus stammen sed.

Bei der ältesten/neuesten Auswahl wird nicht zwischen Verzeichnissen und Dateien unterschieden. Wenn Sie dort also keine Verzeichnisse möchten, müssen Sie die Ausgabe filtern, ls -tum die Verzeichnisse zu entfernen.

verwandte Informationen