rekurencyjnie kopiuj wszystkie pliki z jednego katalogu do drugiego z wyjątkami


8

Jak potrzebuję skopiować wszystkie pliki oprócz kilku katalogów z jednego katalogu do drugiego. na przykład:

cp -R test /www/test2 would copy all

Ale chcę wykluczyć 2 foldery o nazwie log i logi.

Próbowałem czegoś takiego:

find ~test -not -name logs,log |  cp -R test /www/test2 

Ale czy możesz mi pomóc w składni?

Odpowiedzi:


10

Użyj rsync:

rsync -a --exclude=logs --exclude=log from/ to/

rynsc trochę dla mnie zadziałało!
Micheal,

rsync jest teraz moim nowym przyjacielem :) Dzięki, wyjaśnienie jest fajne
Aleks

2

Myślę, że szukasz czegoś takiego:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}

@sputnick zobacz moje zmiany. Jeśli znasz, możesz zaoferować za to wyrażenie emacs.
Tim Pote

0

Jeśli używasz :

shopt -s extglob
cp -R test/!(log|logs) /www/test2

Zobacz http://wiki.bash-hackers.org/syntax/pattern


Co dzieje się, gdy struktura jest taka test/someotherdir/logs:? OP nigdy nie powiedział logi logsbył drugim co do wielkości katalogiem.
Tim Pote

Jeśli ponownie przeczytasz, komendy OP find ~test -not -name logs,logi logi powinny być podkatalogiem.
Gilles Quenot

findprzegląda rekursywnie wszystkie podkatalogi. Globowanie plików nie. Aby Twoja odpowiedź zadziałała logi logsmusiałaby być bezpośrednim podkatalogiem test.
Tim Pote,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.