kopiuj rekurencyjnie oprócz ukrytego katalogu

13

Jak kopiować rekurencyjnie cp -rf *, ale wykluczając ukryte katalogi (katalogi zaczynające się od.) I ich zawartość?

uray
źródło

Odpowiedzi:

6

Możesz po prostu skopiować wszystko

cp -rf 

a następnie usuń ukryte katalogi w miejscu docelowym za pomocą

find -type d -name '.*' -and -not -name '.' -print0 | xargs -0 rm -rf

Alternatywnie, jeśli masz zaawansowaną tar (np. GNU tar), możesz spróbować użyć tar, aby wykluczyć niektóre wzorce. Obawiam się jednak, że nie można wykluczyć tylko ukrytych katalogów, ale także ukryte pliki.

Na przykład coś takiego:

tar --exclude=PATTERN -f - -c * | tar -C destination -f - -x

Btw, GNU tar ma zoo wykluczających opcje stylu. Moim ulubionym jest

--exclude-vcs
maxschlepzig
źródło
30

Dobre opcje kopiowania drzewa katalogów, z wyjątkiem niektórych plików, to:

  • rsync : jest to w zasadzie cp plus mnóstwo możliwości wykluczenia.

    rsync -a --exclude='.*' /source/ /destination
    
  • pax : ma pewne możliwości wykluczania i jest w POSIX, więc powinien być dostępny wszędzie (poza tym, że niektóre dystrybucje Linuksa z jakiegoś powodu nie uwzględniają go w domyślnej instalacji).

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    
Gilles „SO- przestań być zły”
źródło
8

alternatywnie cpmożesz użyć rsyncz --exclude=PATTERN.

ksenoterracid
źródło