2017-05-11 4 views
0

Ich weiß, wie N neueste Dateien zu finden,Bash: Hier finden Sie neueste N-Dateien mit Dateinamen mit einigen Zeichenfolge beginnen

ls -latr | tail -n32 

Und ich weiß, wie N-Dateien von Dateinamen mit einigen Zeichenfolge beginnen zu finden,

ls filestring* | tail -n32 

Aber ich möchte die fünfzig letzten Dateien finden, deren Dateinamen mit einer Zeichenfolge beginnen.

+0

Für die menschliche Überprüfung oder skripted Verwendung? 'ls-t' ist das Richtige für den eigenen Gebrauch; es ist nicht das Richtige für ein Skript. –

+0

Plug für 'zsh', das für diese Art von Aufgabe besser geeignet ist:' print -l filestring * (om [1,50]) '. – chepner

Antwort

0
ls -lt fileprefix* | head -32 

Es ist nicht notwendig, Sortierung und Tail umzukehren.

+1

Dies funktioniert nicht, wenn mehr Dateien mit diesem Präfix beginnen als auf eine einzelne Befehlszeile passen. –

+0

Das funktioniert für meinen Zweck – tptptpfg

1

Die folgende erfordert GNU find und sort, sondern arbeitet mit allen möglichen Dateinamen (einschließlich den Namen mit Zeilenumbrüchen) und auf Verzeichnisse, in denen die Anzahl der Dateien mit dem angegebenen Präfix beginnen paßt nicht in ARG_MAX:

#!/usr/bin/env bash 
files=() 
counter=32 
while IFS= read -r -d ' ' timestamp && 
     IFS= read -r -d '' filename && 
     ((--counter >= 0)); do 
    files+=("$filename") 
done < <(find "$dir" -type f -printf '%[email protected] %p\0' | sort -zgr) 

declare -p files ## print the generated array of filenames 
  • Mit -printf '%[email protected] %p\0' wird jedes Ergebnis mit dem UNIX-Zeitstempel (Sekunden seit der Epoche) gedruckt; ein Leerzeichen; der Dateiname; und dann ein NUL.
  • sort -z teilt sort mit, dass NULs (die im Gegensatz zu Newlines in Dateinamen nicht existieren können) zum Abgrenzen von Eingabe- und Ausgabesätzen verwendet werden.
  • IFS= read -r -d ' ' timestamp && IFS= read -r -d '' filename liest Inhalt bis zum Platz in einem gegebenen Datensatz in die Variable timestamp, und liest alles bis zum nächsten NUL in die Variable filename.
  • Eine Erläuterung zum Sortieren oder Vergleichen von Dateien basierend auf Metadaten und Why you shouldn't parse the output of ls(1) finden Sie unter BashFAQ #3.

    Verwandte Themen