GNU/Linux >> Znalost Linux >  >> Linux

Jak seřadit názvy souborů v číselném pořadí a v upraveném časovém pořadí?

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)

Linux
  1. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  2. Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

  3. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?

  1. Jak používat wget ke stažení souboru přes proxy

  2. Nainstalujte binární soubory do /bin, /sbin, /usr/bin a /usr/sbin, interakce s --prefix a DESTDIR

  3. Kdy mám použít /dev/shm/ a kdy /tmp/?

  1. Jak Linux používá /dev/tty a /dev/tty0

  2. echo nebo print /dev/stdin /dev/stdout /dev/stderr

  3. Jak změnit výchozí /tmp na /home/user/tmp