Ich möchte PDF-Dateien mit pdfjoin
verbinden /pdfunite
/… in der numerischen Reihenfolge, die im Thread „Antwort zum Linux-Befehl“ gut besprochen wurde, PDF-Dateien mit numerischer Sortierung und Geändert zusammenführen Zeitreihenfolge.
Wenn Sie die Lösung im Thread verwenden, setzt sie die Reihenfolge in die numerische Reihenfolge und die alphabetische Reihenfolge.
Dies ist problematisch bei den Dateinamen, z. B. wenn Sie sehen, dass beide die gleiche Änderungszeit von haben minutengenau, aber Visceral
ist um Sekunden genauer (der Dateibrowser merkt es und fügt Visceral
zuerst im Modified
bestellen.
Filename Modified
----- ---
3.THE ABC.pdf 10:39
3.Visceral abc..pdf 10:39
Vollständige Dateinamen
1.Description abc.pdf
2.Gabcd.pdf
3.THE ABC.pdf
3.Visceral abc..pdf
4.description of abc.pdf
5.Chraa..pdf
Vorschlag #1 funktioniert in der numerischen und alphabetischen Reihenfolge, aber nicht in der numerischen und modifizierten Reihenfolge
# https://stackoverflow.com/a/23643544/54964
ls -v *.pdf | ...
bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
Vorschlag Nr. 2 vereinfacht den Fall, behandelt jedoch keine Leerzeichen und andere Sonderzeichen in Dateinamen
# https://stackoverflow.com/a/23643544/54964
pdfunite $(ls *.pdf | sort -n) output.pdf
In pdfunite --help
steht nichts über die Bestellung, also denke ich, dass es von ls
gemacht werden sollte /sort
/…
Der Befehl sort
hat nichts über modified
in seiner Manpage.
Testen von xhiennes Antwort
Die Reihenfolge in der Ausgabe, in der Sie 2.jpg
sehen, ist nicht korrekt und 4.jpg
sind aus irgendeinem Grund in der falschen Reihenfolge
[email protected]:~/Documents$ ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/1.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/3.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/5.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/6.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/7.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/8.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/9.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/10.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/2.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/4.jpg
Zweite Iteration
export LC_ALL=C; ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s
Ausgabe
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/1.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/3.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/5.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/6.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/7.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/8.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/9.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/10.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/2.jpg
//eadn-wc01-5196795.nxedge.io/home/masi/Documents/4.jpg
Betriebssystem:Debian 8.5
Akzeptierte Antwort:
Das könntest du mit zsh
machen :
zmodload zsh/stat
prefixmtime () {
sortstring=${(l:6::0:)${REPLY%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
REPLY=${sortstring}
}
print -rl -- *(o+prefixmtime)
Ersetzen Sie print -rl
mit Ihrem Befehl, wenn Sie mit dem Ergebnis zufrieden sind
Wie es funktioniert:
Die Globs werden hier sortiert (über o+function
) basierend darauf, was die Funktion prefixmtime
zurückgibt, also sortstring
Dabei handelt es sich um eine Zeichenfolge, die durch Verketten des numerischen Präfixes jedes Dateinamens ${REPLY%%.*}
erhalten wird links mit Nullen aufgefüllt (l:6::0:)
(vorausgesetzt Präfixe sind bis zu 6 Zeichen lang) und die mtime
in Sekunden (erhalten über zstat
Modul). Es ist möglicherweise einfacher zu verstehen, wie es funktioniert, wenn Sie Folgendes ausführen:
{ for f (*)
printf '%s %s\n' ${(l:6::0:)${f%%.*}}$(zstat -F '%s' +mtime -- $f) $f
} | sort -k1,1n
Beachten Sie, dass das Obige davon ausgeht, dass Sie sich im selben Verzeichnis wie Ihre Dateien befinden, andernfalls müssen Sie die Sortierzeichenfolge in dieser Funktion als
definierensortstring=${(l:6::0:)${${REPLY##*/}%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
und dann können Sie Verzeichnispfade verwenden, z. B.
print -rl some/place/else/*(o+prefixmtime)