cp
akan selalu menyalin file pada awal perintah ke file atau direktori pada akhir perintah. Slash tidak terlalu berpengaruh pada argumen, kecuali argumennya adalah symlink ke direktori. Kemudian memiliki garis miring akan memperlakukannya seperti direktori sementara menghilangkan garis miring akan menyalin tautan itu sendiri.
Dengan asumsi Anda ingin menyalin secara berulang subdirektori dalam contoh Anda, Anda akan menyukainya seperti:
cp -r /home/src/somedir /dest
dan
cp -r /home/src/somedir/* /dest
Yang pertama mendapatkan direktori /home/src/somedir
dan akan menyalin argumen itu, direktori itu sendiri dan semua isinya, ke argumen terakhir /dest
,. Ini akan membuat somedir
direktori /dest
jika diperlukan dan menggunakannya jika sudah ada.
The addes kedua *
sampai akhir argumen pertama, yang shell akan memperluas untuk menjadi setiap file yang tidak dimulai dengan .
di /home/src/somedir
dan akan menyalin semua file-file dan direktori untuk /dest
tanpa memperhatikan apa yang sudah ada (kecuali beberapa bendera untuk cp
akan membuatnya meminta untuk menimpa file yang akan memiliki yang sama di dalam tujuan sebagai file yang ada).
Seperti komentar yang ditunjukkan oleh jawaban ini, ada masalah dalam menggunakan *
untuk mengambil semua file di direktori. Salah satu alternatif adalah menggunakan tar
salinan untuk Anda
tar -c -C /home/src/somedir . | tar -x -C /dest
ini akan membuat file tar somedir
tanpa lintasan terkemuka dengan menggunakan -C
untuk beralih ke direktori itu terlebih dahulu. Secara default tar
akan mencetak stdout
yang kemudian kami pipa ke yang lain tar
untuk mengekstraknya beralih ke /dest
direktori yang diinginkan terlebih dahulu. Ini juga akan mempertahankan banyak atribut file, yang cp
dapat melakukannya juga.
cp -r /home/src/somedir /dest/
harus mengatasi kedua situasi, baik membuat atau menggabungkan ke folder yang ada