Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: StenM 18 Března 2010, 11:50:51

Název: Jak na hromadné kopírování adresářů podle obsahu v souborech
Přispěvatel: StenM 18 Března 2010, 11:50:51
Dobrý den,

 rád bych se zeptal, zda mi někdo může poradit, jak automaticky kopírovat celé adresáře-složky podle obsahu v souborech? Třeba pomocí nějakého skriptu.

 Mám data s cca 2000-3000 položek a každá položka obsahuje strukturu podadresářů (např. Feb20-2008-26/1/pdata/1; Oct03-2009-11/2/pdata/1; ...). Soubor (title) s rozhodujícím řetězcem je až v tom nejvyšším adresáři, ale kopírovat potřebuji celý adresář včetně všech souborů (např. Feb20-2008-26).

Za každou pomoc předem děkuji

Stanislav

Používám Kubuntu 9.10
Název: Re: Jak na hromadné kopírování adresářů podle obsahu v souborech
Přispěvatel: mka 18 Března 2010, 12:01:32
A co takhle
Kód: [Vybrat]
man cp? S důrazem na volbu -r; ale umí toho daleko víc, je to v čestině :-)

Jinak z toho popisu nahoře nějak ne zcela úplně chápu, co vlastně potřebuješ; bodla by nějaká
Kód: [Vybrat]
ukázka té souboruvé struktury :-)
Název: Re: Jak na hromadné kopírování adresářů podle obsahu v souborech
Přispěvatel: StenM 18 Března 2010, 12:41:25
adresářový strom je asi takovíto:
Kód: [Vybrat]
|-- Aug01-2009-20
|   `-- 1                
|       |-- acqu
|       |-- acqus
|       |-- audita.txt
|       |-- fid
|       |-- format.temp
|       |-- orig
|       |-- pdata
|       |   `-- 1
|       |       |-- auditp.txt
|       |       |-- email_Aug01-2009-20_1_1.pdf
|       |       |-- intrng
|       |       |-- outd
|       |       |-- parm.txt
|       |       |-- peak.txt
|       |       |-- peaks
|       |       |-- proc
|       |       |-- procs
|       |       `-- title
|       |-- prosol_History
|       |-- pulseprogram
|       |-- scon
|       `-- uxnmr.par
|-- Apr25-2009-3
|   `-- 3
|       |-- acqu
|       |-- acqus
|       |-- audita.txt
|       |-- fid
|       |-- format.temp
|       |-- orig
|       |-- pdata
|       |   `-- 1
|       |       |-- auditp.txt
|       |       |-- email_Apr25-2009-3_3_1.pdf
|       |       |-- intrng
|       |       |-- outd
|       |       |-- parm.txt
|       |       |-- peak.txt
|       |       |-- peaks
|       |       |-- proc
|       |       |-- procs
|       |       `-- title
|       |-- prosol_History
|       |-- pulseprogram
|       |-- scon
|       `-- uxnmr.par


 Potřebuji rozhodnout podle obsahu souboru "title" a zkopírovat celý adresář "Aug01-2009-20" nebo "Apr25-2009-3". Něco jako kombinace následujících příkladů:

Kód: [Vybrat]
$find /home/x/dat -name "title" -exec grep "CHL" '{}' /dev/null \; -print
=> vypíše seznam souborů s celou adresou.

Kód: [Vybrat]
find /home/x/dat -name "title" -exec grep "CHL" '{}' /dev/null \; -exec cp {} -r /home/x/cop \;
=>došlo jen ke zkopírování souboru "title" obsahujícímu řetězec "CHL"

Kód: [Vybrat]
find . -name "title" -exec grep "CHL" '{}' /dev/null \; -exec cp {} --parents -r /home/x/cop \;

tree /home/x/cop

`-- Apr11-2008-3
    `-- 1
        `-- pdata
            `-- 1
                `-- title
=> kromě souboru "title" se nic dalšího nepřekopíruje, i když je to včetně cesty

//Tadeáš Pařík EDIT: Prosím, používejte code.
Název: Re: Jak na hromadné kopírování adresářů podle obsahu v souborech
Přispěvatel: MacHala 19 Března 2010, 20:00:14
no ty tvoje findy jsem nejak nepochopil, co treba neco jako:
Kód: [Vybrat]
find /home/x/dat -maxdepth 1 -mindepth 1 -type d | while read line
do
  if grep "vzor" `find $line -name 'title'`
  then
    cp -r $line /home/x/cop
  fi
done
?


EDIT: psal jsem to z hlavy + viz. paticka
Název: Re: Jak na hromadné kopírování adresářů podle obsahu v souborech
Přispěvatel: StenM 19 Března 2010, 21:38:55
Díky, to je to co jsem potřeboval.  :)

Má to jen jednu drobnosti, které tomu brání dosáhnout dokonalosti. Neporadí si to s názvy adresářů obsahujících mezeru (dalo se to naštěstí řešit ručně, bylo jich jen 5)

S-

Název: Re: Jak na hromadné kopírování adresářů podle obsahu v souborech
Přispěvatel: Tadeáš Pařík 19 Března 2010, 21:46:46
Díky, to je to co jsem potřeboval.  :)

Má to jen jednu drobnosti, které tomu brání dosáhnout dokonalosti. Neporadí si to s názvy adresářů obsahujících mezeru (dalo se to naštěstí řešit ručně, bylo jich jen 5)

S-



je = /nazev souboru/nazev souboru/
má být = /nazev\ souboru/nazev\ souboru/
případně = "/nazev souboru/nazev souboru/"