Portál AbcLinuxu, 4. května 2025 19:23

Dotaz: Vyhledání více souborů pomoci find a regexp

heartbreaker avatar 7.12.2009 23:02 heartbreaker
Vyhledání více souborů pomoci find a regexp
Přečteno: 389×
Odpovědět | Admin
Zdravím, potřeboval bych napsat skript, který by mi vypsal všechny soubory kromě hudebních. Nebo aspoň soubory, jejíchž přípony nejsou uvedeny v poli.

Začal jsem takto:
#!/bin/bash

# Pole se soubory, které nechci vypsat
music=("mp3" "m3u")
dir=$1
if [ -d "$dir" ]; then
  find "$dir"* ! -iname \*.mp3 -exec ls '{}' \;
fi
To mi najde vše, kromě *.mp3, ale jak docílit požadované funkčnosti?

Budu vděčný za mírné nakopnutí (protože se s tím chci poprat víceméně sám), ale nebráním se ani ukázkám.

Řešení dotazu:


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

Odpovědi

7.12.2009 23:18 Jirka P
Rozbalit Rozbalit vše Re: Vyhledání více souborů pomoci find a regexp
Odpovědět | | Sbalit | Link | Blokovat | Admin
Můžeš použít operátory findu:

find "$dir"* ! \( -iname \*.wav -o -iname \*.mp3 \) -exec ls '{}' \;

což prostě vygeneruješ z toho pole. Jiná možnost je použít file:

find "$dir" | xargs file -i | grep -v ': audio/' | ... něco co z toho vyhodí jména ...
7.12.2009 23:31 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Vyhledání více souborů pomoci find a regexp
Prípadne sa dá použiť -iregex (spolu s -regextype) a teda niečo ako:
#!/bin/bash

# Pole se soubory, které nechci vypsat
music=("mp3" "m3u")
tmp_IFS=$IFS
IFS="|"
re="\.(${music[*]})$"
IFS=$tmp_IFS

dir=$1
if [ -d "$dir" ]; then
	find "$dir" -regextype posix-extended -type f -a ! -iregex "$re"
fi
Řešení 1× (heartbreaker (tazatel))
pek avatar 8.12.2009 09:29 pek | skóre: 20
Rozbalit Rozbalit vše Re: Vyhledání více souborů pomoci find a regexp
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co třeba:
#!/bin/bash
[ -d "$1" ] && find "$1" -type f | grep -Evi "\.(ogg|mp3|flac|m3u|wav)$"
Slackware

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.