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
-
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
-
A co takhle
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á ukázka té souboruvé struktury :-)
-
adresářový strom je asi takovíto:
|-- 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ů:
$find /home/x/dat -name "title" -exec grep "CHL" '{}' /dev/null \; -print
=> vypíše seznam souborů s celou adresou.
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"
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.
-
no ty tvoje findy jsem nejak nepochopil, co treba neco jako:
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
-
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-
-
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/"