Portál AbcLinuxu, 20. dubna 2024 00:47


Dotaz: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...

13.11.2022 17:55 Pepa
Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
Přečteno: 309×
Odpovědět | Admin
Dobrý den, potřeboval bych zpracovávat očíslované soubory v adresáři tak, aby se zpracovaly podle čísel 1 2 3 4 5 6 7 8 9 10 11 12 ... a nevím jak to udělat v tomto případě: for file in *.jpg; A aby výstup byl opět správně 1 2 3 4 5 6 7 8 9 10 11. Zatím mi to čte soubory takto 1 10 100 101 102 1000 atd. Ještě doplnění některé soubory nejsou obsaženy, např. : 1 2 3 5 9 10 11 15 .... Takto vypadá např. název souboru: Screen-12.jpg Screen-13.jpg .... Děkuji moc za postrčení.
Po pětašedesátce jde všechno pomaleji.

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.11.2022 18:43 X
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
Odpovědět | | Sbalit | Link | Blokovat | Admin
for i in $(seq 1 1000); do
....
  [ -f "Screen-$i.jpg" ] && ....
....
13.11.2022 18:55 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nech sa páči:
$ cd /dev/shm/
$ mkdir e
$ cd e
$ touch 120.jpg
$ touch 12.jpg
$ touch 2.jpg
$ ls
12.jpg  120.jpg  2.jpg
$ ls|sort -h
2.jpg
12.jpg
120.jpg
$
debian.plus@protonmail.com
14.11.2022 18:10 Pepa
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
Toto .... ls|sort -h .....bohužel nechodí správně. Př. čísla souborů: 0 1 10 11 12 1223 1224 13 14 2 3 ..... Takto to nepotřebuji, ale takto: 0 1 2 3 10 11 12 13 14 1223 1224
Po pětašedesátce jde všechno pomaleji.
14.11.2022 18:36 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
Žiaden problém. Miesto -h treba dat parameter -g.
$ touch 0 1 10 11 12 1223 1224 13 14 2 3
$ ls
0  1  10  11  12  1223  1224  13  14  2  3
$ ls|sort -g | xargs
0 1 2 3 10 11 12 13 14 1223 1224
debian.plus@protonmail.com
Řešení 1× (Gréta)
14.11.2022 11:29 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
Odpovědět | | Sbalit | Link | Blokovat | Admin

Pokud jsou čísla v názvech souborů dostatečně „hustá“, tedy žádná nejsou vynechaná nebo je vynechaných rozumně málo:

for ((i = 1; i <= 1000; ++i)); do
  f="Screen-${i}.jpg"
  [[ -f "$f" ]] && echo "Do something with ${f}!"
done

Pokud jsou čísla v názvech souborů řídká a testovat existenci všech možných názvů souborů nemá smysl (a/nebo trvá 5000 let):

declare -ai files
for f in *.jpg; do
  f="${f%.jpg}"
  f="${f#Screen-}"
  ((++files[f]))
done
for i in "${!files[@]}"; do
  f="Screen-${i}.jpg"
  echo "Do something with ${f}!"  
done
unset files
Výše uvedené využívá faktu, že (také) indexovaná pole v Bashi jsou řídká a při expanzi jsou implicitně setříděná podle indexů.
14.11.2022 18:47 Pepa
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
Perfektní! Toto chodí správně. Děkuji moc.
Po pětašedesátce jde všechno pomaleji.
14.11.2022 19:00 unreg
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
To mi prijde moc komplikovane. Pokud vychazim z premisy, ze nazev souboru je dle vzorku Screen-<cislo>.jpg, tak separator je "-" a zajima me druhy sloupec.

vychozi stav:
$ ls -1
Screen-0.jpg
Screen-10.jpg
Screen-11.jpg
Screen-1223.jpg
Screen-1224.jpg
Screen-12.jpg
Screen-13.jpg
Screen-14.jpg
Screen-1.jpg
Screen-2.jpg
Screen-3.jpg
sort:
$ ls -1 | sort -t - -nk2
Screen-0.jpg
Screen-1.jpg
Screen-2.jpg
Screen-3.jpg
Screen-10.jpg
Screen-11.jpg
Screen-12.jpg
Screen-13.jpg
Screen-14.jpg
Screen-1223.jpg
Screen-1224.jpg
Gréta avatar 15.11.2022 11:11 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...

todlecto dělání s ls už andrej jednou komentoval hele zdroj :O ;D

Nikdy neparsuj výstup z ls. Je to

  • nechvalně známý antipattern,
  • náchylné ke spoustě zbytečných chyb,
  • naprosto a totálně a kolosálně zbytečné.

takže asi jako tak :D ;D

14.11.2022 18:58 X
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
Nemas delat ty domaci ukoly kompletni, takhle se nic nenauci..
Gréta avatar 15.11.2022 11:14 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...

tssss todlecto je na domáckám moc praktický a ikdyby to jakoby byl domácák nóóó tak teďko se má jako aspoň z čeho učit :D ;D

14.11.2022 18:29
Rozbalit Rozbalit vše Re: Zpracování souborů v adresáři podle správného číselného pořadí : 1 2 3 4 ...10 11 12 ...99 100 101 ...
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já bych ty fotky přejmenoval podle exifu na YYYY-MM-DD_mmhhss.jpg. Pak není co řešit.

Případně, pokud tam není exif, se dají ty soubory přejmenovat tak, aby jejich názvy byly stejně dlouhé a na začátku byly uvozené nulami. Pak zase není co řešit.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.