Loop-Dateien, Nächste Nummer abrufen

378
LifeLongLearner

In einem Verzeichnis habe ich folgende Dateien:

 000 - text.txt 000 - info.txt 001 - first.txt 002 - second.txt aaa - more.txt ZZZ - text.txt ZZZ - info.txt 

Wie bekomme ich in Bash die nächste numerische Nummer (z. B. 003)?

Ich möchte "aaa - *", "aab - *", "ZZZ - *" usw. ignorieren.



Derzeit durchlaufe ich alle Dateien und verwende \d\d\d alle Dateien mit der höchsten Anzahl

Pseudocode:

min = 000  for each file in directory if match \d\d\d > min max = match \d\d\d  printf %03d $((max + 1)) 

Ich bin sicher, dass es eine effizientere Methode gibt (z. B. möglicherweise ls oder ähnliches verwenden).

1
Ich bin nicht sicher, ob es effizienter ist, obwohl es wahrscheinlich netter ist, `ls [0-9] [0-9] [0-9] *. Txt | tail -n 1 'zu verwenden, dann die Zahl in der zurückgegebenen Zahl zu erhöhen Datei. AFH vor 7 Jahren 0
Vorsicht bei den Regexen. Wenn kein Leerzeichen vor der Zahl im Dateinamen angenommen wird, möchten Sie `^ \ d \ d \ d` vermeiden, um das Abgleichen einer Datei wie` zzz - foo 111 bar.txt` zu vermeiden. quixotic vor 7 Jahren 0

1 Antwort auf die Frage

0
janos

Das könnte man so machen:

# loop over files that start with 3 digits # the shell will naturally order them, the last will be the max for last in [0-9][0-9][0-9]*; do :; done  # strip the first space and everything after it num=$  # get the next number ((next = num + 1))  # pad with zeros printf "%03d" $next