GNU/Linux >> Belajar Linux >  >> Linux

folder gabungan linux:rsync?

Saya hanya melakukan pengujian fungsionalitas terbatas, jadi harap berhati-hati dengan perintah ini (--dry-run):

rsync -avPr --ignore-existing --remove-source-files src/ dest

Harap perhatikan trailing / karena ini akan berulang ke src alih-alih menyalin src itu sendiri, ini harus mempertahankan jalur Anda yang sudah ada.

Dengan menggunakan flag --ignore-existing yang dikombinasikan dengan flag --remove-source-files, Anda hanya akan menghapus file dari src yang disinkronkan dari src ke dest, yaitu file yang sebelumnya tidak ada di dest saja.

Untuk menghapus file yang tidak disinkronkan, yaitu file yang sudah ada di dest/ seperti di src/, Anda dapat menggunakan:

for file in `find src/ -type f`; do diff $file `echo $file | sed 's/src/dest/'` && rm $file || echo $file; done

atau

find src -type f -exec bash -c 'cmp -s "$0" "${0/#src/dest}" && rm "$0"' {} \;

jika nama file dapat berisi spasi putih/baris baru/...Mengenai komentar Gilles tentang karakter khusus, hal itu tentu saja harus diperhatikan dan ada banyak solusi, yang paling sederhana adalah dengan meneruskan -i ke rm yang akan meminta sebelum semua penghapusan. Asalkan src/, atau jalur induknya, disediakan untuk menemukan, bagaimanapun, jalur yang sepenuhnya memenuhi syarat harus menghasilkan semua nama file ditangani dengan benar oleh perintah diff dan rm tanpa mengutip.


serempak adalah alat yang Anda cari. Coba unison-gtk jika Anda lebih suka gui. Tapi menurut saya itu tidak akan menghapus file yang serupa:serempak coba agar kedua direktori identik. Namun demikian itu akan dengan mudah 1) mengidentifikasi file mana yang akan disalin; 2) mana yang membutuhkan penggabungan manual.


Skrip berikut harus melakukan hal-hal yang wajar. Itu memindahkan file dari sumber ke tujuan, tidak pernah menimpa file dan membuat direktori seperlunya. File sumber yang memiliki file berbeda yang sesuai di tujuan dibiarkan begitu saja, begitu pula file yang bukan file atau direktori biasa (mis. Tautan simbolik). File yang tersisa di sumber adalah file yang ada konfliknya. Hati-hati, saya belum mengujinya sama sekali.

cd src
find . -exec sh -c '
    set -- "/path/to/dest/$0"
    if [ -d "$0" ]; then #  the source is a directory 
      if ! [ -e "$1" ]; then
        mv -- "$0" "$1"  # move whole directory in one go
      fi
    elif ! [ -e "$0" ]; then  # the source doesn't exist after all
      :  # might happen if a whole directory was moved
    elif ! [ -e "$1" ]; then  # the destination doesn't exist
      mv -- "$0" "$1"
    elif [ -f "$1" ] && cmp -s -- "$0" "$1"; then  # identical files
      rm -- "$0"
    fi
  ' {} \;

Pendekatan lain adalah dengan melakukan union mount satu direktori di atas yang lain, misalnya dengan funionfs atau unionfs-fuse.


Linux
  1. Perintah rsync Linux dengan contoh praktis

  2. Linux setara dengan robocopy?

  3. Linux NTFS ke NTFS rsync berulang kali menyalin ulang file

  1. Bandingkan File dan Folder Secara Grafis di Linux Dengan Meld

  2. Contoh Praktis Perintah rsync di Linux

  3. Bagaimana cara menggunakan perintah Rsync di linux?

  1. Cara menemukan file di Linux

  2. Temukan File Besar di Linux

  3. File khusus Linux (mv atau cp) dari daftar teks file?