BASH: kako iskopirati fajlove u svim poddirektorijumima u jedan direktorijum?
Dobrodošli, Gost. Molim vas prijavite se ili se registrujte.
Da li ste izgubili vaš aktivacioni e-mail?

Prijavite se sa korisničkim imenom, lozinkom i dužinom sesije

Linuxo Forumi

Stranice: 1 [2]   Idi dole
  Štampaj  
Autor Tema: BASH: kako iskopirati fajlove u svim poddirektorijumima u jedan direktorijum?  (Pročitano 3631 puta)
0 članova i 1 posetilac pregledaju ovu temu.
foxbunny
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 2436



WWW
« Odgovor #15 poslato: 03 Мај 2008, 10:33:20 »

find ima podrsku za regexp, tako da ne moras ni da grepujes. Wink
Prijavi uredniku   Sačuvana

Časlav Ilić
Full Member
***
Na mreži Na mreži

Pol: Muškarac
Poruke: 224



« Odgovor #16 poslato: 03 Мај 2008, 11:01:10 »

Jest, al' su njegovi regizovi ružniji od grepovih (posebno grep -E, tj. egrep), u ovom primeru bi bilo nešto kao ! -regex '.*\.svn/.*'. Drugo, možda i ne želim da grepujem pre obrade, već nešto peto (npr. sortiram, ili čak grepujem po sadržaju, grep -liI). Treće, možda mi je za krajnju naredbu baš i neophodno da se pozove sa svim pronađenim datotekama, a ne samo radi brzine. Kad se sve sabere, prosto se ne hvatam za te „napredne“ mogućnosti find, a vidim da i inače ljudi to ne čine po skriptama.

(Doduše, pročitao sam negde da find ... -exec može biti korisno u slučajevima kada je bitna bezbednost, da se ništa ne umeša u cevku.)
Prijavi uredniku   Sačuvana
foxbunny
Hero Member
*****
Van mreže Van mreže

Pol: Muškarac
Poruke: 2436



WWW
« Odgovor #17 poslato: 03 Мај 2008, 12:44:16 »

Pa naravno, to je poenta Unix shella, uvek mozes da pajpujes. To jest, ako ne mozes, onda ta komanda i nije Unixicna. Wink

Ali ono, find je dovoljno mocan da moze i sam da ti zavrsi 99% stvari koje si naveo. Cheesy

A sto se tice bezbednosti, preporucuju -execdir.
Prijavi uredniku   Sačuvana

Marel
Full Member
***
Van mreže Van mreže

Pol: Muškarac
Poruke: 190


« Odgovor #18 poslato: 16 Мај 2008, 20:40:29 »

Da li može nekako da se izvede ovako nešto:

Kod:
for file in `find . -type f`; do
    # radimo nešto sa promenjljivom $file
done

Pošto for koristi space kao separator, svi fajlovi koji sadrže ovaj znak u svom nazivu će se tretirati kao dva.

Najbolje rešenje koje sam smislio je da se napravi fajl "../skript":

Kod:
read file
while [ "$file" ]; do
    # radimo nešto sa promenjljivom $file
    read file
done

pa da se pozove sa

Kod:
find . -type f | sh ../skript

Prijavi uredniku   Sačuvana
Časlav Ilić
Full Member
***
Na mreži Na mreži

Pol: Muškarac
Poruke: 224



« Odgovor #19 poslato: 16 Мај 2008, 21:17:13 »

Možeš to da spakuješ u zaglavlje petlje:
Kod:
find . -type f | while read file; do
    # radimo nešto sa promenjljivom "$file", al' uvek pod navodnicima
done
Prijavi uredniku   Sačuvana
Marel
Full Member
***
Van mreže Van mreže

Pol: Muškarac
Poruke: 190


« Odgovor #20 poslato: 16 Мај 2008, 22:56:09 »

Stvarno korisna funkcionalnost. Nije mi palo na pamet da to može (jer je while built in naredba). Smiley
Prijavi uredniku   Sačuvana
Stranice: 1 [2]   Idi gore
  Štampaj  
 
Prebaci se na: