Quiero unir archivos pdf por pdfjoin
/pdfunite
/… en el orden numérico discutido bien en el comando de linux de respuesta de hilo fusionar archivos pdf con clasificación numérica y Modificado orden de tiempo.
Si usa la solución en el hilo, pone el orden en orden numérico y orden alfabético.
Esto es problemático con los nombres de archivo, como cuando ve que ambos tienen el mismo tiempo modificado por precisión de minutos pero Visceral
es anterior por segunda precisión (el navegador de archivos lo anota y pone Visceral
primero en el Modified
orden.
Filename Modified
----- ---
3.THE ABC.pdf 10:39
3.Visceral abc..pdf 10:39
Nombres de archivo completos
1.Description abc.pdf
2.Gabcd.pdf
3.THE ABC.pdf
3.Visceral abc..pdf
4.description of abc.pdf
5.Chraa..pdf
La propuesta n.° 1 funciona en el orden numérico y alfabético, pero no en el orden numérico y modificado
# https://stackoverflow.com/a/23643544/54964
ls -v *.pdf | ...
bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
La propuesta n.º 2 simplifica el caso, pero no trata los espacios en blanco y otros caracteres especiales en los nombres de archivo
# https://stackoverflow.com/a/23643544/54964
pdfunite $(ls *.pdf | sort -n) output.pdf
No hay nada en el pdfunite --help
sobre el pedido, así que creo que debería hacerlo ls
/sort
/…
El comando sort
no tiene nada sobre modified
en su página man.
Probando la respuesta de xhienne
El orden no es correcto en la salida donde ve 2.jpg
y 4.jpg
están en el orden incorrecto por alguna razón
[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
2da iteración
export LC_ALL=C; ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s
Salida
//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
SO:Debian 8.5
Respuesta aceptada:
Podrías hacer eso con zsh
:
zmodload zsh/stat
prefixmtime () {
sortstring=${(l:6::0:)${REPLY%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
REPLY=${sortstring}
}
print -rl -- *(o+prefixmtime)
Reemplazar print -rl
con su comando si está satisfecho con el resultado
Cómo funciona:
Los globos se ordenarán aquí (a través de o+function
) basado en lo que la función prefixmtime
devuelve, que es sortstring
que es una cadena obtenida al concatenar el prefijo numérico de cada nombre de archivo ${REPLY%%.*}
relleno a la izquierda con ceros (l:6::0:)
(suponiendo que los prefijos tengan hasta 6 caracteres) y el mtime
en segundos (obtenido a través de zstat
módulo). Puede ser más fácil entender cómo funciona si ejecuta:
{ for f (*)
printf '%s %s\n' ${(l:6::0:)${f%%.*}}$(zstat -F '%s' +mtime -- $f) $f
} | sort -k1,1n
Tenga en cuenta que lo anterior supone que está en el mismo directorio que sus archivos; de lo contrario, tendrá que definir la cadena de clasificación en esa función como
sortstring=${(l:6::0:)${${REPLY##*/}%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
y luego puede usar rutas de directorio, por ejemplo,
print -rl some/place/else/*(o+prefixmtime)