it-swarm-id.com

Salin konten direktori menggunakan perintah 'cp'

Bagaimana Anda menyalin semua konten dari satu direktori ke direktori lain?

Sebagai contoh:

$ cd /home/newuser
$ cp -a /backup/olduser/* .

Masalah dengan hal di atas adalah bahwa pola globing '*' cocok dengan direktori tersembunyi '.' dan '..' dan Anda berakhir dengan direktori 'pengguna lama' di dalam 'pengguna baru', serta kontennya.

Anda juga dapat melakukan sesuatu seperti ini:

$ rmdir /home/newuser
$ cp -a /backup/olduser /home/newuser

Tetapi bagaimana jika pengguna baru sudah mengandung beberapa file dan direktori default?

Apa yang paling sederhana, paling benar, paling mudah diingat dan bukan cara mess-up untuk memindahkan konten dari satu direktori ke direktori lain hanya dengan menggunakan perintah 'cp' dan shell?

33
nomount

Mencoba:

cp -ra /backup/olduser/. /home/newuser
30
nagul

Dua direktori a dan b.

Keduanya memiliki file.

Anda berada di direktori yang berisi a dan b.

cp -r ./a b

-r = secara rekursif.

23
Rich Bradshaw

Juga ingat bahwa secara default cp salin direktori pertama ke direktori kedua jika yang kedua ada. Misalnya cp -a a b akan menyalin INTO b jika b ada, mis. Itu akan membuat menjadi b.

Jika bukan yang Anda inginkan, dan Anda ingin menyalin konten dari a ke b (misalnya saat menyalin seluruh sistem file ke titik mount) gunakan:

cp -a a/. b

seperti pada jawaban sebelumnya.

Harap perhatikan juga bahwa -a termasuk -r sehingga -ar adalah mubazir.

18
Nicolas Bonnefon

Kecuali Anda telah mengkonfigurasi ulang Shell Anda dengan serius, pola globbing '*' tidak cocok '.' atau '..', karena Anda dapat memverifikasi hanya dengan menggunakan gema *. Apa yang dilakukan sebagai gantinya adalah menghilangkan file yang namanya dimulai dengan '.', Sehingga pendekatan Anda akan kehilangan semua file tersembunyi. Anda bisa tweak beberapa perilaku ini dengan opsi Shell, misalnya opsi dotglob di bash, tetapi itu tidak akan menjadi opsi portabel dan kuat yang Anda cari.

Jika Anda perlu melakukan ini lebih dari sekali atau dua kali, saya sarankan Anda melihat rsync atau serempak (tergantung pada kebutuhan spesifik) dengan sumber yang dibuat dengan hati-hati dan spesifikasi target.

Alternatif lain adalah menempatkan direktori sumber di tarball dan membukanya di atas direktori target yang ada.

6

Ini akan menyalin file normal dan tersembunyi, sambil mengecualikan direktori induk (..):

cd /directory/to/copy
cp -r * .[^.]* /destination/directory

Jika Anda tidak mengecualikan direktori induk, Anda berakhir dengan semua konten .. di direktori tujuan Anda juga.

2
mch

Ini berfungsi untuk menyalin semua file dan direktori kecuali untuk direktori tersembunyi secara rekursif dari direktori saat ini ke mana pun:

cp -rf * ^.* 
0
Seeeve

Untuk menyalin file yang dimulai dengan titik, lakukan saja cp. * Target /

Jadi yang paling mudah adalah dengan melakukan perintah cp dua kali.

Seperti Peter Eisentraut sais aturan globbing normal tidak termasuk .. dan. (hm, bagaimana cara mengakhiri kalimat ini?;)

Cukup gunakan -r untuk membuatnya rekursif dan -i untuk membuat cp tanyakan apakah Anda benar-benar ingin menimpa file.

cp -ri /backup/olduser/* /newuser/
cp -ri /backup/olduser/.* /newuser/
0
gaqzi