Saya memiliki dua direktori gambar dan gambar2 dengan struktur ini di Linux:
/images/ad
/images/fe
/images/foo
... dan 4000 folder lainnya
dan yang lainnya seperti:
/images2/ad
/images2/fe
/images2/foo
... dan 4000 folder lainnya
Masing-masing folder ini berisi gambar dan nama direktori di bawah gambar dan gambar2 persis sama, namun isinya berbeda. Lalu saya ingin tahu bagaimana saya bisa menyalin-menggabungkan gambar / images2 / iklan menjadi gambar / iklan, gambar / images2 / foo menjadi gambar / foo dan seterusnya dengan semua 4000 folder ..
Jawaban:
Ini adalah pekerjaan untuk rsync . Tidak ada manfaatnya melakukan ini secara manual dengan loop shell kecuali jika Anda ingin memindahkan file daripada menyalinnya.
Dalam kasus Anda:
(Catatan trailing slash on
images2
, kalau tidak itu akan menyalin/images/images2
.)Jika gambar dengan nama yang sama ada di kedua direktori, perintah di atas akan menimpa
/images/SOMEPATH/SOMEFILE
dengan/images2/SOMEPATH/SOMEFILE
. Jika Anda ingin mengganti hanya file yang lebih lama, tambahkan opsi-u
. Jika Anda ingin selalu menyimpan versi/images
, tambahkan opsi--ignore-existing
.Jika Anda ingin memindahkan file dari
/images2
, dengan rsync, Anda dapat meneruskan opsi--remove-source-files
. Kemudian rsync menyalin semua file secara bergantian, dan menghapus setiap file setelah selesai. Ini jauh lebih lambat daripada bergerak jika direktori sumber dan tujuan berada pada sistem file yang sama.sumber
rsync
, makarm -r /images
.rsync -a images images2
, itu hanya akan menyalin gambar2 ke dalam gambar daripada menggabungkannya.Pilihan terbaik, seperti yang sudah diposting, tentu saja rsync. Namun demikian juga serempak akan menjadi perangkat lunak yang hebat untuk melakukan pekerjaan ini. Keduanya dapat digunakan di beberapa sistem operasi.
Rsync
rsync menyinkronkan dalam satu arah dari sumber ke tujuan. Demikian pernyataan berikut ini
menyinkronkan semuanya dari Sumber ke Tujuan . Folder gabungan berada di Tujuan .
-a berarti "mengarsipkan" dan menyalin segala sesuatu secara rekursif dari sumber ke tujuan menjaga hampir segalanya.
-v memberikan lebih banyak output ("verbose").
-h untuk dibaca manusia.
--kemajuan untuk menunjukkan berapa banyak pekerjaan yang dilakukan.
Jika Anda ingin hanya memperbarui yang tujuan folder dengan yang lebih baru file dari folder sumber:
Serentak
serentak menyinkronkan di kedua arah. Demikian pernyataan berikut ini
menyinkronkan kedua direktori di kedua arah dan akhirnya sumber sama dengan tujuan. Ini seperti melakukan rsync dua kali dari sumber ke dest dan sebaliknya.
Untuk penggunaan lebih lanjut, lihat halaman manual atau situs web berikut:
sumber
rsync -avh --progress source/ destination/
, jika tidak folder sumber akan dibuat di folder tujuan, setidaknya dalam kasus saya yang seperti ini.Lingkari semua konten
images2
menggunakan glob yang diperluas (untuk menghindari masalah dengan penguraianls
) kemudianmv
isi item tersebut ke entri yang cocokimages
. Penggunaanbasename
untuk melepaskan yang memimpinimages2
dari jalur bola.sumber
@ inulinux12, Anda dapat menggunakan satu baris
for
loop berikut dari baris perintah:Ini akan memindahkan semua file dari
images2
keimages
dalam direktori masing-masing. Catatan: ini mengasumsikan tidak ada file dengan nama yang sama.Sebagai contoh:
Sebelum eksekusi:
Setelah eksekusi:
sumber
ls
. mywiki.wooledge.org/ParsingLsbasename
dalam situasi khusus ini (tidak perlu memintabasename
ini). Sekali lagi terima kasih atas komentar yang membangun.