
Ich wollte die erste Textdatei in jedem Verzeichnis mit „cat oder vi“ lesen. Um das Problem zu verdeutlichen:
Der Ordner_A1 enthält 1000 Textdateien. Die Dateinamen sind im Format „i.1351“ angegeben. Alle Dateinamen beginnen mit „i.“ und die Nummern sind bei diesen Dateien unterschiedlich.
Ich habe 500 Ordner, jeder davon enthält ca. 1000 Textdateien (*.txt), und ich möchte nur die erste Datei in jedem Ordner lesen. Wie kann ich das tun?
Antwort1
Wenn Sie wirklich die erste Datei in der Verzeichnisreihenfolge möchten und davon ausgehen, dass alle Ordnernamen mit beginnen Folder_
, sind alle Einträge, die mit beginnen Folder_
, Verzeichnisse und alle Einträge, die mit beginnen, i.
Dateien:
for d in Folder_*; do
for f in "$d"/i.*; do
cat -- "$f"
break
done
done
Antwort2
Dies ist aufgrund der Sortierung etwas langsam.
find . -type f | sort -V |
awk -F/ '{ dir=substr($0,1,length($0)-length($NF));
if(last==dir)next; last=dir; print}' |
| xargs cat
Dies -V
dient zum Sortieren i.2
vor i.10
. Dies awk
gibt den Dateinamen bei jedem Verzeichniswechsel aus. (Setzt voraus, dass die Namen keine Leerzeichen enthalten.)