Chci připojit soubory PDF pomocí pdfjoin
/pdfunite
/… v číselném pořadí dobře popsaném ve vláknu odpověď příkaz linux sloučit soubory PDF s číselným řazením a Upraveno časové pořadí.
Pokud použijete řešení ve vláknu, zařadí pořadí v číselném a abecedním pořadí.
To je problematické u názvů souborů, jako když vidíte, že oba mají stejný čas. minutová přesnost, ale Visceral
je o sekundu dřívější přesnost (Prohlížeč souborů si to všimne a vloží Visceral
nejprve v Modified
objednávka.
Filename Modified
----- ---
3.THE ABC.pdf 10:39
3.Visceral abc..pdf 10:39
Kompletní názvy souborů
1.Description abc.pdf
2.Gabcd.pdf
3.THE ABC.pdf
3.Visceral abc..pdf
4.description of abc.pdf
5.Chraa..pdf
Návrh č. 1 funguje v číselném a abecedním pořadí, ale ne v číselném a upraveném pořadí
# https://stackoverflow.com/a/23643544/54964
ls -v *.pdf | ...
bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" output.pdf'
Návrh č. 2 zjednodušuje velikost písmen, ale neřeší mezery a další speciální znaky v názvech souborů
# https://stackoverflow.com/a/23643544/54964
pdfunite $(ls *.pdf | sort -n) output.pdf
V pdfunite --help
není nic o objednávání, takže si myslím, že by to mělo být provedeno pomocí ls
/sort
/…
Příkaz sort
nemá nic o modified
na jeho manuálové stránce.
Testování odpovědi xhienne
Pořadí není správné ve výstupu, kde vidíte 2.jpg
a 4.jpg
jsou z nějakého důvodu ve špatném pořadí
[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. iterace
export LC_ALL=C; ls -tr /home/masi/Documents/[0-9]* | sort -t. -k1,1n -s
Výstup
//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
OS:Debian 8.5
Přijatá odpověď:
Můžete to udělat pomocí zsh
:
zmodload zsh/stat
prefixmtime () {
sortstring=${(l:6::0:)${REPLY%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
REPLY=${sortstring}
}
print -rl -- *(o+prefixmtime)
Nahraďte print -rl
s vaším příkazem, pokud jste s výsledkem spokojeni
Jak to funguje:
Zde se budou globy třídit (pomocí o+function
) na základě funkce prefixmtime
vrátí, to je sortstring
což je řetězec získaný zřetězením číselné předpony každého názvu souboru ${REPLY%%.*}
doplněno doleva nulami (l:6::0:)
(za předpokladu, že předpony jsou dlouhé až 6 znaků) a mtime
v sekundách (získáno pomocí zstat
modul). Může být snazší pochopit, jak to funguje, když spustíte:
{ for f (*)
printf '%s %s\n' ${(l:6::0:)${f%%.*}}$(zstat -F '%s' +mtime -- $f) $f
} | sort -k1,1n
Všimněte si, že výše uvedené předpokládá, že jste ve stejném adresáři se svými soubory, jinak budete muset definovat třídicí řetězec v této funkci jako
sortstring=${(l:6::0:)${${REPLY##*/}%%.*}}$(zstat -F '%s' +mtime -- $REPLY)
a pak můžete použít cesty k adresářům, např.
print -rl some/place/else/*(o+prefixmtime)