Użyj rsync, aby skopiować wszystkie pliki z wyjątkiem niektórych nazw plików z pewnym rozszerzeniem

28

Mam dwie karty flash tego samego rozmiaru i chcę skopiować zawartość jednej do drugiej na podstawie następujących zasad:

  1. Chcę mieć wszystkie katalogi i podkatalogi na swoim miejscu
  2. Chcę wykluczyć pliki typu .FOO, .BAR i .ZIM (wszystkie inne pliki są kopiowane)
  3. Bonus: Byłoby fajnie, gdyby wyświetlał nazwy plików podczas ich kopiowania, biorąc pod uwagę, że kopiuje ~ 8 GB informacji

Czy można to jakoś zrobić z „znajdź”?

macek
źródło

Odpowiedzi:

41

Byłoby to znacznie łatwiejsze przy użyciu rsync z jego --excludeprzełącznikiem.

rsync -av --exclude='*.FOO' --exclude='*.BAR' --exclude='*.ZIM' /source /dest

-vPrzełącznik zapewni wyjście opisowy, w którym pliki są zsynchronizowane.

John T.
źródło
Trochę tu kontynuacji: kopia została zakończona, a / src / * jest teraz w / dest / src / * Jak użyć rsync, aby uzyskać / src / * w / dest / *?
Macek
Spróbuj/source/ /dest
John T
To nie działa Nadal widzę, że pliki * .FOO są kopiowane.
Jake
Określono, jak należy podać ścieżkę --exclude. Jeśli masz z tym problemy, sprawdź tę odpowiedź .
totymedli
0

Jeśli masz dużą liczbę rozszerzeń do wykluczenia, możesz utworzyć plik i zapisać całe rozszerzenie lub plik, aby wykluczyć, i użyć tylko jednej opcji wykluczenia, aby uprościć.

rsync -ravz --exclude = '. / abc, txt' / source / dest

Zawsze dobrze jest użyć opcji z do kompresji i opcji r, jeśli trzeba kopiować rekurencyjnie.

amit singh
źródło