Voglio unire i file pdf tramite pdfjoin
/pdfunite
/... nell'ordine numerico discusso bene nel thread answer comando linux unisci i file pdf con ordinamento numerico e Modificato ordine temporale.
Se usi la soluzione nel thread, inserisce l'ordine nell'ordine numerico e alfabetico.
Questo è problematico con i nomi dei file, ad esempio dove vedi che entrambi hanno lo stesso tempo modificato da precisione minima ma Visceral
è precedente di una seconda precisione (il browser dei file lo rileva e inserisce Visceral
prima nel Modified
ordine.
Filename Modified
----- ---
3.THE ABC.pdf 10:39
3.Visceral abc..pdf 10:39
Nomi file completi
1.Description abc.pdf
2.Gabcd.pdf
3.THE ABC.pdf
3.Visceral abc..pdf
4.description of abc.pdf
5.Chraa..pdf
La proposta n. 1 funziona in ordine numerico e alfabetico ma non in ordine numerico e modificato
# https://stackoverflow.com/a/23643544/54964
ls -v *.pdf | ...
bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
La proposta n. 2 semplifica il caso ma non tratta gli spazi bianchi e altri caratteri speciali nei nomi dei file
# https://stackoverflow.com/a/23643544/54964
pdfunite $(ls *.pdf | sort -n) output.pdf
Non c'è niente in pdfunite --help
sull'ordinazione, quindi penso che dovrebbe essere fatto da ls
/sort
/…
Il comando sort
non ha nulla su modified
nella sua pagina man.
Testare la risposta di xhienne
L'ordine non è corretto nell'output dove vedi 2.jpg
e 4.jpg
sono nell'ordine sbagliato per qualche motivo
[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
2a iterazione
export LC_ALL=C; ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s
Uscita
//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
Sistema operativo:Debian 8.5
Risposta accettata:
Puoi farlo con zsh
:
zmodload zsh/stat
prefixmtime () {
sortstring=${(l:6::0:)${REPLY%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
REPLY=${sortstring}
}
print -rl -- *(o+prefixmtime)
Sostituisci print -rl
con il tuo comando se sei soddisfatto del risultato
Come funziona:
I glob verranno ordinati qui (tramite o+function
) in base alla funzione prefixmtime
restituisce, ovvero sortstring
che è una stringa ottenuta concatenando il prefisso numerico di ciascun nome file ${REPLY%%.*}
riempito a sinistra con zeri (l:6::0:)
(supponendo che i prefissi siano lunghi fino a 6 caratteri) e il mtime
in secondi (ottenuto tramite zstat
modulo). Potrebbe essere più facile capire come funziona se esegui:
{ for f (*)
printf '%s %s\n' ${(l:6::0:)${f%%.*}}$(zstat -F '%s' +mtime -- $f) $f
} | sort -k1,1n
Nota che quanto sopra presuppone che tu sia nella stessa directory con i tuoi file, altrimenti dovrai definire la stringa di ordinamento in quella funzione come
sortstring=${(l:6::0:)${${REPLY##*/}%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
e quindi puoi utilizzare i percorsi delle directory, ad es.
print -rl some/place/else/*(o+prefixmtime)