IT Blok

kutilovo živobytí kromě www.msi-elektro.cz

Jak v Linuxu spustíme všechny soubory z adresáře

Může se stát, že z linuxového serveru/PC chceme spustit řadu souborů. Například jsou to SQL skripty, které spustíme nad nějakou databází nebo shell skripty apod.

Můžeme buď spouštět jeden po druhém, nebo využít cyklus for či příkaz find. Dále si ukážeme jak na to.

Použití cyklu for

for file in /adresar/*; do příkaz [parametr] "$file" >> výsledek.out; done

Konkrétní příklad:

michell@server1:msi$ ls
bar.txt  baz.txt  foo.txt
michell@server1:msi$ for i in *.txt; do echo "hallo $i"; done
hallo bar.txt
hallo baz.txt
hallo foo.txt
michell@server1:msi$

V adresáři máme 3 txt soubory. Ty si v první části cyklu přiřadíme do proměnné i. V další části cyklu se nám postupně provede příkaz echo, který vypíše hallo a název souboru. Třetí část cyklu po provedení předchozí cyklus ukončí.
V cyklu se soubory berou v abecedním/číselném pořadí. Takže pokud chceme spustit shellové skripty (.sh) v určitém pořadí, je dobré skripty pojmenovat tak, aby se v tomto požadovaném pořadí spustily.
Např. 01-skript.sh, 02-skript.sh, 03-skript.sh atp.

Ve druhé části cyklu nemusíme používat jen příkaz echo, ale v podstatě cokoliv jiného. Např. sh pro spouštění skriptů, nebo sqlplus pro postupné spuštění SQL skriptů apod.

Použití příkazu find

find /adresar -maxdepth 1 -type f -exec příkaz [parametr] {} \; > vysledek.out

Parametr -maxdepth zabrání prohledávání případných podadresářů v daném adresáři. Parametr -type f zajistí, že budou použity pouze soubory z daného adresáře.
Parametr -exec příkaz [parametr] {} zajistí spuštění příkazu s parametrem nad soubory, které našel příkaz find dle předchozích parametrů. Zpětné lomítko \ označuje konec příkazu.
Výsledek ze všech spuštění se uloží do souboru vysledek.out.

Z výše uvedeného se jeví jako šikovnější použití cyklu for. Už kvůli tomu, že si můžeme určit typ souborů (dle jejich koncovky) které chceme spouštět. Takže v adresáři můžeme mít směs SQL, SH aj. souborů a spustí se nám jen ty, které v zápisu definujeme.