Apa yang dimaksud dengan "cp: menghilangkan direktori"?

408

Saya telah mengeluarkan perintah berikut:

sudo cp ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

Ketika saya melakukan ini, saya mulai mendapatkan pesan-pesan berikut:

cp: omitting directory `Tag' 
cp: omitting directory `Test' 
cp: omitting directory `Text' 
cp: omitting directory `TimeSync' 
cp: omitting directory `Tool' 
cp: omitting directory `Translate' 
cp: omitting directory `Uri' 
cp: omitting directory `Validate' 

dan seterusnya...

Mengapa saya menerima pesan ini?

MEM
sumber

Jawaban:

536

Secara default, cphanya menyalin file langsung di, dan bukan subdirektori dalam direktori. Pesan itu cp: omitting directory 'directory'memperingatkan Anda bahwa direktori yang disebutkan tidak disalin.

Untuk melakukannya, tentukan opsi -r(atau --recursive):

sudo cp -r ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

The halaman pengguna (command: man cp) berisi gambaran dari pilihan yang tersedia.

Lekensteyn
sumber
2
Terima kasih banyak. Saya pikir * akan menghadapinya secara rekursif. Tapi tidak. : D Terima kasih lagi. :)
MEM
11
@MEM: *diperluas oleh Bash, bukan oleh cp. Uji sendiri dengan meletakkan echo di depan perintah Anda. Ketika diperluas, itu cocok dengan semua yang sebelumnya ...library/Zend/(file dan direktori di dalamnya).
Lekensteyn
Kabar omitting directory 'directory'baiknya adalah itu tidak berarti menghapus direktori itu.
Bishwas Mishra
@Lekensteyn saya mencoba untuk menyalin konten dari satu pengguna ke pengguna lain. Jadi saya mendapatkan izin dari pengguna dengan chmod a+rx ~/setelah saya mencoba untuk menyalinnya cp /home/2110/* /home/2111/menghasilkan kesalahan yang menyatakan izin ditolak. dimana saya salah maaf untuk berkomentar karena saya tidak dapat mengajukan pertanyaan rangkap. saya berharap jawaban cepat :)
jasinth premkumar
@ jasinthpremkumar File dalam /home/2110dimiliki oleh pengguna 2110 sedangkan file dalam /home/2111seharusnya dimiliki oleh 2111. Untuk mengatur pemilik, gunakan sesuatu seperti sudo chown -R 2111 /home/2111.
Lekensteyn
40

Pesan itu berarti bahwa cpbelum menyalin direktori yang terdaftar. Ini adalah perilaku default untuk cp- hanya file yang disalin secara normal, terlepas dari apakah Anda menentukannya secara eksplisit atau menggunakan *. Jika Anda ingin menyalin direktori gunakan -rsaklar yang berarti "rekursif".

Roger Light
sumber
16

Beberapa hal di sini yang perlu diperiksa:

  1. Jangan gunakan sudo. Anda tidak memerlukannya, Anda sudah memiliki izin untuk menulis sesuatu di direktori home Anda sendiri.

  2. Anda dapat dengan mudah melihat file dan direktori tersembunyi di manajer file grafis dengan memilih Lihat / Tampilkan File Tersembunyi dari menu. Atau dengan menekan Ctrl- H.

  3. Anda perlu menggunakan -Ropsi dalam cpperintah untuk menyalin direktori dan isinya.

  4. / home bukan direktori home Anda. / home / username adalah. Jadi, Anda mungkin mencoba menyalin dari tempat yang salah.

  5. Shell sensitif terhadap huruf besar-kecil, jadi ~ / unduhan dan ~ / Unduhan adalah dua hal yang berbeda.

Nikunj K.
sumber
2

Ketika Anda menyalin direktori seperti:

cp dir1 copy_of_dir1

Anda hanya dan tepat menyalin dir1dirinya sendiri dan bukan file di dalamnya, jadi pada akhirnya Anda akan berakhir dengan struktur direktori baru sementara strukturnya tidak ada.

Dengan kata lain setelah itu telah disalin akan mengatakan bahwa isi saya file1, file2, dll; Namun file-file ini belum disalin sehingga tidak ada di dalamnya.

Jadi untuk memperbaiki masalah ini yang mungkin muncul cpsecara default tidak menyalin direktori dan melewatkannya kecuali jika Anda menentukan -ropsi yang menyalin semua file secara rekursif juga.

Ravexina
sumber
1

Alasannya omitting directoryadalah karena cpdan semua utilitas salin, yang saya tahu, membuat daftar file dan sub-direktori yang akan disalin sebelum mulai menyalin file. Ketika --recursiveopsi hilang, sub-direktori dihabisi dari daftar ini. Dengan demikian, menghilangkan mengacu pada penghapusan dari daftar salinan, bukan dari media sumber Anda. Saya percaya ini membahas arti dari pesan tersebut.

endrias
sumber
0

The cp Perintah ini digunakan untuk menyalin file dan direktori, bukan direktori bersarang, jika Anda ingin menyalin direktori bersarang maka Anda dapat menambahkan -r setelah itu, di mana r berarti rekursif.

Sintaks yang dapat Anda ikuti (berjalan sebagai root):

cp -r /source/dir/* /destination/ 

atau

cp --recursive /source/dir/* /destination/
itsguri
sumber
0

itu akan menghilangkan sub-direktori dalam contoh pertama jika Anda tidak menggunakan flag -r yang melakukan penyalinan rekursif.

cp -r sumber tujuan

-r katakan itu dilakukan secara rekursif. Berarti menyalin semua yang ada di folder dll.

sunilyadav0201
sumber
1
Jawaban ini merupakan duplikat dari jawaban yang ada ini: askubuntu.com/a/1165846
karel
-1

Misalkan Anda memiliki dua direktori 'Tag' & 'Test'

Jika Anda ingin menyalin direktori 'Tag' ke direktori 'Test' gunakan perintah

$ : cp -r Tag Test (case sensitive)

Sebagian besar Masalah akan diselesaikan dengan kode di atas jika tidak dan Anda mendapatkan pesan seperti di bawah ini

cp: omitting directory `Tag' 
cp: omitting directory `Test'

kemudian tambahkan beberapa file di direktori 'Tag' dan kemudian salin ke 'Test'. Sebenarnya saya memiliki masalah yang sama tetapi diselesaikan seperti apa yang saya katakan kedua.

jainmiah shaik
sumber