Je veux joindre des fichiers pdf par pdfjoin
/pdfunite
/… dans l'ordre numérique bien discuté dans le fil answer linux command merge pdf files with digital sort and Modified ordre de l'heure.
Si vous utilisez la solution dans le fil, elle place l'ordre dans l'ordre numérique et l'ordre alphabétique.
Cela pose problème avec les noms de fichiers, par exemple lorsque vous voyez que les deux ont la même heure modifiée par précision à la minute mais Visceral
est plus tôt à la seconde près (le navigateur de fichiers le note et met Visceral
premier dans le Modified
commande.
Filename Modified
----- ---
3.THE ABC.pdf 10:39
3.Visceral abc..pdf 10:39
Noms de fichiers complets
1.Description abc.pdf
2.Gabcd.pdf
3.THE ABC.pdf
3.Visceral abc..pdf
4.description of abc.pdf
5.Chraa..pdf
La proposition #1 fonctionne dans l'ordre numérique et alphabétique mais pas dans l'ordre numérique et modifié
# https://stackoverflow.com/a/23643544/54964
ls -v *.pdf | ...
bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
Proposition #2 cas simplifié mais ne traite pas les espaces blancs et autres caractères spéciaux dans les noms de fichiers
# https://stackoverflow.com/a/23643544/54964
pdfunite $(ls *.pdf | sort -n) output.pdf
Il n'y a rien dans le pdfunite --help
à propos de la commande donc je pense que cela devrait être fait par ls
/sort
/…
La commande sort
n'a rien à propos de modified
dans sa page de manuel.
Tester la réponse de xhienne
L'ordre n'est pas correct dans la sortie où vous voyez 2.jpg
et 4.jpg
sont au mauvais ordre pour une raison quelconque
[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
2ème itération
export LC_ALL=C; ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s
Sortie
//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
Système d'exploitation :Debian 8.5
Réponse acceptée :
Vous pouvez le faire avec zsh
:
zmodload zsh/stat
prefixmtime () {
sortstring=${(l:6::0:)${REPLY%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
REPLY=${sortstring}
}
print -rl -- *(o+prefixmtime)
Remplacez print -rl
avec votre commande si vous êtes satisfait du résultat
Comment ça marche :
Les globs seront triés ici (via o+function
) en fonction de ce que la fonction prefixmtime
renvoie, c'est-à-dire sortstring
qui est une chaîne obtenue en concaténant le préfixe numérique de chaque nom de fichier ${REPLY%%.*}
rempli à gauche avec des zéros (l:6::0:)
(en supposant que les préfixes comportent jusqu'à 6 caractères) et le mtime
en secondes (obtenu via zstat
module). Il peut être plus facile de comprendre comment cela fonctionne si vous exécutez :
{ for f (*)
printf '%s %s\n' ${(l:6::0:)${f%%.*}}$(zstat -F '%s' +mtime -- $f) $f
} | sort -k1,1n
Notez que ce qui précède suppose que vous êtes dans le même répertoire avec vos fichiers, sinon vous devrez définir la chaîne de tri dans cette fonction comme
sortstring=${(l:6::0:)${${REPLY##*/}%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
puis vous pouvez utiliser des chemins de répertoire, par exemple
print -rl some/place/else/*(o+prefixmtime)