Jak nalézt soubory v adresáři

Jak nalézt soubory v adresáři
« kdy: 03. 02. 2011, 00:37:13 »
pro jednu příponu to není problém (ls *.mkv; find *.mkv; find | grep mkv$ )

ls *.mkv *.avi (pokud není alespoň jeden soubor od každé přípony - vypíše nalezené a chybu)
find *.mkv *.avi (stejně jako u ls)

zajímá mě, jak nechat vypsat v jednom seznamu, soubory avi a mkv, aniž by to vypsalo chybu
« Poslední změna: 03. 02. 2011, 10:24:35 od Petr Krčmář »


Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re: Jak nalézt soubory v adresáři (2 a více přípon)
« Odpověď #1 kdy: 03. 02. 2011, 01:51:23 »
Co použít příkaz man? Ne neslouží k hledání souborů, ale odpověď na svoji otázku bys tam našel, kdybys  sis přečet aspoň ty příkazy, nad kterejmas uvažoval...
find -name \*.mkv -or -name \*.avi

Další možnost je regex
 ls | egrep '(\.mkv$)|(\.py$)'

btw. to
find *.mkv
i
find | grep mkv$
je dosti blbina - teda ono to nějak funguje, ale úplně jinak, než pravděpodobně myslíš, i když je  výsledek takovej, jakej čekáš (proto to taky selže u dvou argumentů)...

Re: Jak nalézt soubory v adresáři (2 a více přípon)
« Odpověď #2 kdy: 03. 02. 2011, 02:14:17 »
víš, man používám, a '-name' jsem i našel, ale nějak jsem přehlédl konstrukci typu '-or -name'

tak či tak, díky za odpověď

pet

Re: Jak nalézt soubory v adresáři (2 a více přípon)
« Odpověď #3 kdy: 03. 02. 2011, 07:47:03 »
RTFM: man bash:
ls *.{mkv,avi}

Tomas M

Re: Jak nalézt soubory v adresáři (2 a více přípon)
« Odpověď #4 kdy: 03. 02. 2011, 08:50:38 »
Pro 'pet': pokud bude pocet souboru v adresari vyhovujicich podmince enormni (treba desitky tisic), pak prikaz typu ls *.{mkv,avi} nebude fungovat, protoze shell expansion se provede jeste pred spustenim programu ls, a enormni mnozstvi argumentu dela problem.

Na tohle je bezpecnejsi ten program find.


Re: Jak nalézt soubory v adresáři (2 a více přípon)
« Odpověď #5 kdy: 03. 02. 2011, 10:20:35 »
Tak jo, děkuji všem za rady.

Šlo mi o to, dosadit vhodný příkaz (z manuálů se těžko hledá vhodný, když některé příkazy vůbec neznáte) do scriptu tak aby nemusel být pro každou příponu nový cyklus.

Díky tomu jsem zjistil, že find i ls a egrep asi ne, protože tam jaksi zůstávají i adresáře (nehledě na to, že druhý z uvedených z jakéhosi důvodu vypisuje i soubory typu .mkv.jpg atp.)

Jediný funkční tedy zůstává ls *.{mkv,avi}, ještě že nemám tisíce souborů v jednom adresáři (mám max. 500)
« Poslední změna: 03. 02. 2011, 12:39:46 od Michal Švarc »

xKiv

Re: Jak nalézt soubory v adresáři
« Odpověď #6 kdy: 03. 02. 2011, 16:50:49 »
>protože tam jaksi zůstávají i adresáře
find umi i -type f

Re: Jak nalézt soubory v adresáři
« Odpověď #7 kdy: 04. 02. 2011, 00:18:12 »
No dobrá, funguje i toto:
find -type f -name \*.avi -o -name \*.mkv
(jen člověk nesmí zapomínat na to že to hledá i rekurzivně)

iko

  • ***
  • 146
    • Zobrazit profil
    • E-mail
Re: Jak nalézt soubory v adresáři
« Odpověď #8 kdy: 04. 02. 2011, 08:17:19 »
ls -1 | grep --regexp '.*\.avi' --regexp '.*\.mkv'
« Poslední změna: 04. 02. 2011, 08:20:06 od iko »

Re: Jak nalézt soubory v adresáři
« Odpověď #9 kdy: 04. 02. 2011, 10:33:20 »
Kód: [Vybrat]
ls -1 *.mkv *.avi 2>/dev/null
PS: pro hodně velký počet souborů to nebude fungovat (problém s délkou parametrů), tam pak asi ten find ...

pepazdepa

Re: Jak nalézt soubory v adresáři
« Odpověď #10 kdy: 04. 02. 2011, 11:15:26 »
pro jednu příponu to není problém (ls *.mkv; find *.mkv; find | grep mkv$ )

ls *.mkv *.avi (pokud není alespoň jeden soubor od každé přípony - vypíše nalezené a chybu)
find *.mkv *.avi (stejně jako u ls)

zajímá mě, jak nechat vypsat v jednom seznamu, soubory avi a mkv, aniž by to vypsalo chybu

lameri! proc grep!????

$ ls *.+(mkv|avi)
kokot1.mkv kokot2.avi
$ echo $SHELL
/usr/local/bin/ksh

$ ls *.+(mkv|avi)
kokot1.mkv  kokot2.avi
$ echo $SHELL
/bin/bash

Kit

Re: Jak nalézt soubory v adresáři (2 a více přípon)
« Odpověď #11 kdy: 04. 02. 2011, 12:03:21 »
Šlo mi o to, dosadit vhodný příkaz (z manuálů se těžko hledá vhodný, když některé příkazy vůbec neznáte) do scriptu tak aby nemusel být pro každou příponu nový cyklus.

Kód: [Vybrat]
#!/bin/bash

find "$1" -maxdepth 1 -name \*.mkv -o -name \*.avi \
      -exec vcs -O bg_sign=black -O bg_contact=silver -O fg_heading=black \
            -H 100 -c 4 -i 250s -j -n 24 '{}' \;

none

Re: Jak nalézt soubory v adresáři
« Odpověď #12 kdy: 04. 02. 2011, 18:41:34 »
No dobrá, funguje i toto:
find -type f -name \*.avi -o -name \*.mkv
(jen člověk nesmí zapomínat na to že to hledá i rekurzivně)
Clovece na co je ti ten man? Co zkusit: -maxdepth 0?

Re: Jak nalézt soubory v adresáři
« Odpověď #13 kdy: 04. 02. 2011, 23:19:32 »
$ ls *.+(mkv|avi)
bash: chyba syntaxe poblíž neočekávaného tokenu „(“

Clovece na co je ti ten man? Co zkusit: -maxdepth 0?
A k čemu je tobě? Jak už psal před tebou kit, musí tam být -maxdepth 1. S nulou to nenajde nic.

Kód: [Vybrat]
find "$1" -maxdepth 1 -name \*.mkv -o -name \*.avi \
      -exec vcs -O bg_sign=black -O bg_contact=silver -O fg_heading=black \
            -H 100 -c 4 -i 250s -j -n 24 '{}' \;
Díky

Re: Jak nalézt soubory v adresáři
« Odpověď #14 kdy: 17. 03. 2011, 11:26:18 »
Kód: [Vybrat]
$ ls *.+(mkv|avi)
1.avi  2.mkv
$ echo $SHELL
/bin/bash
$ bash --version
GNU bash, verze 4.1.5(1)-release (i486-pc-linux-gnu)
...