GNU/Linux >> Linux Esercitazione >  >> Linux

Come ordinare i nomi dei file in ordine numerico e in ordine temporale modificato?

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)

Linux
  1. Come spostare /usr e /var su un'altra partizione o disco

  2. Installa i binari in /bin, /sbin, /usr/bin e /usr/sbin, interazioni con --prefix e DESTDIR

  3. Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

  4. unix:///var/run/supervisor.sock nessun file di questo tipo

  5. I siti web dovrebbero vivere in /var/ o /usr/ in base all'utilizzo consigliato?

Bash =~ Regex e HTTPS://regex101.com/?

Quanto sono portatili /dev/stdin, /dev/stdout e /dev/stderr?

Linux – Unire /usr/bin e /usr/sbin in /bin (gnu/linux)?

/proc/cpuinfo e /proc/meminfo in Linux

Come usare wget per scaricare file tramite proxy

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions