Bagaimana saya bisa mengecualikan semua subdirektori tetapi menyertakan file direktori di rsync?

13

Saya ingin mencadangkan sistem Ubuntu saya dan saya memiliki dua partisi yang harus diperhatikan: Satu adalah /, yang lain adalah /home.

Saya mungkin ingin mencadangkan /. Ini bahkan tidak sebesar itu sehingga saya dapat membawanya di kartu SD saya, sementara cukup responsif untuk membuat saya ingin memiliki gambar itu (itu sebabnya saya mencoba menggunakan rsync saat ini).

Dan tentang /home, memiliki banyak subdirektori bahwa saya tidak peduli tentang banyak sehingga saya tidak akan mungkin termasuk mereka, tapi aku ingin berhati-hati tentang file di sana, seperti seperti .bash_history, .bashrc, .face, dan sebagainya.

Jadi saya ingin mengecualikan semua subdirektori sembari memasukkan file dalam /home. Bagaimana saya bisa mencapainya?

--exclude "*/"tidak bekerja "/*/", "/**/", --include "*" --exclude */Tidak menunjukkan apa yang saya inginkan. setidaknya itu menyalin folder sumber, tanpa menyalin apa pun di dalamnya.

Dinir
sumber

Jawaban:

17

Coba perintah ini:

rsync -a -f"- */" -f"+ *" /home/user/ destination/

man rsync

-f, --filter=RULE           add a file-filtering RULE

Aturan untuk memasukkan semua file *dan mengecualikan dir*/

Pendekatan lain untuk menggunakan salinan reguler cp

cp /home/usr/* /destination

Anda dapat menyingkirkan kesalahan tentang dir menggunakan pengalihan

cp /home/usr/* /destination 2>/dev/null

Ini hanya akan menyalin file di dalam rumah Anda tanpa direktori

Maythux
sumber
/ proc memiliki sistem file virtual yang tidak nyata, Anda harus mengecualikannya dari cadangan, juga Anda harus mengecualikan / tmp dan / run
Maythux
Perintah asli saya untuk membackup semuanya adalah seperti ini:rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H -b -s --exclude home/dinir/ --exclude media/ --exclude proc/kcore / /home/dinir/Temporal Site for Storing Backups
Dinir
/ proc, / tmp, dan / run, Periksa! Bagaimanapun, seperti yang Anda lihat di komentar saya, saya harus mencadangkan seluruh sistem file root tidak termasuk direktori home dengan sedikit pengecualian. Apakah memasukkan -f" */" -f"+ *"kode saya aman? Mungkin itu akan seperti -f"- home/dinir/*/" -f"+ home/dinir/*"?
Dinir
Anda harus menggunakannya seperti itu-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux
tapi saya
sarankan
3

Jika Anda ingin menyelesaikan ini dengan --includedan --excludeparameter, Anda harus mengubah urutannya: pertama tidak termasuk apa yang Anda inginkan, kemudian sertakan semuanya. Saya biasanya melakukannya dengan perintah ini:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'
Mattia72
sumber
2

Secara default, rsynctidak menyalin direktori. Mungkin Anda menggunakan -abendera. Jika ini masalahnya, perhatikan bahwa menurut halaman manual , -asama dengan -rlptgoD, jadi jika Anda tidak ingin berulang, gunakan saja -lptgoD.

Brian Moths
sumber