Saya mencoba menyalin beberapa file ke folder yang ada. Ini adalah contoh skema
# origin
/home/user/myfiles/folder1/group1/1.jpg
/home/user/myfiles/folder1/group1/2.jpg
/home/user/myfiles/folder1/group2/1.jpg
/home/user/myfiles/folder1/group2/2.jpg
/home/user/myfiles/folder2/group1/1.jpg
/home/user/myfiles/folder2/group1/2.jpg
/home/user/myfiles/folder2/group2/1.jpg
/home/user/myfiles/folder2/group2/2.jpg
Skema folder tujuan sudah ada, hanya file asal (jpg) yang tidak ada.
Pertanyaan saya adalah bagaimana melakukan ini?
Saya ingin berakhir dengan sesuatu seperti di bawah ini, tetapi ini tidak berhasil. Mungkin saya harus memasukkan regex dalam kueri untuk memisahkan asterisk menjadi nilai dan digunakan sebagai asal / tujuan?
cp /home/user/myfiles/*/*/*.jpg /home2/user/myfiles/*/*/*.jpg
Tujuan awal saya adalah menggunakan skema penyalinan ini pada pertanyaan saya yang belum dijawab: s3cmd: bagaimana cara menyalin file dari lokal ke bucket S3 dengan struktur yang ada sebagai solusi yang memungkinkan.
Jawaban:
Dengan GNU cp Anda dapat menggunakan
--parents
opsi, seperti ini:Anda harus
cd
terlebih dahulu karena jika Anda melakukannyacp --parents /home/user/myfiles/...
akan membuat orang tua itu juga, dan Anda akan berakhir dengan/home2/user/myfiles/home/parents/myfiles/
.Jika Anda membutuhkan jawaban non-GNUish, metode unix tradisional akan menjadi tar di atas pipa.
Yang kedua
cd
adalah dalam subkulit dengan tar kedua, jadi di situlah file diekstraksi. Tarball itu sendiri dibuat, dikirim melalui pipa, dan diekstraksi pada waktu yang bersamaan. Tambahkanv
bendera ke salah satu ter jika Anda ingin melaporkan kemajuan.sumber
Yang berikut harus melakukan trik:
Pada dasarnya, saya mengekstraksi bagian dari nama file yang akan berubah di antara dua folder, dan kemudian mengeluarkan perintah salin.
Perhatikan "cut -f 4- " di atas - ia mendapat bidang dari tanggal 4 dan seterusnya. Anda dapat mengubah nomor sesuai keinginan Anda
Mungkin bahkan
basename
atau perintah yang lebih sederhana ada ... tetapi ini akan berlaku untuk saat ini :)sumber