salin secara rekursif kecuali direktori tersembunyi

13

Bagaimana cara saya menyalin secara rekursif cp -rf *, tetapi mengecualikan direktori tersembunyi (direktori dimulai dengan.) Dan isinya?

uray
sumber

Jawaban:

6

Anda bisa menyalin semuanya dengan

cp -rf 

lalu hapus direktori tersembunyi di tujuan dengan

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

Atau, jika Anda memiliki beberapa tar canggih (misalnya tar GNU), Anda bisa mencoba menggunakan tar untuk mengecualikan beberapa pola. Tapi saya khawatir tidak mungkin hanya mengecualikan direktori tersembunyi, tetapi juga menyertakan file tersembunyi.

Misalnya sesuatu seperti ini:

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

Btw, GNU tar memiliki kebun binatang opsi gaya kecualikan. Favorit saya adalah

--exclude-vcs
maxschlepzig
sumber
30

Pilihan yang baik untuk menyalin pohon direktori kecuali untuk beberapa file adalah:

  • rsync : ini pada dasarnya adalah cp plus satu ton kemungkinan pengecualian.

    rsync -a --exclude='.*' /source/ /destination
    
  • pax : ia memiliki beberapa kemampuan pengecualian, dan itu dalam POSIX jadi harus tersedia di mana-mana (kecuali bahwa beberapa distribusi Linux tidak memasukkannya dalam instalasi default mereka untuk beberapa alasan).

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    
Gilles 'SANGAT berhenti menjadi jahat'
sumber
8

atau cpAnda dapat menggunakan rsyncdengan --exclude=PATTERN.

xenoterracide
sumber