Pertanyaan Bagaimana cara menyalin dengan cp untuk memasukkan file tersembunyi dan direktori tersembunyi dan isinya?


Bagaimana saya bisa membuatnya cp -r salinan tentu saja semua file dan direktori dalam direktori

Persyaratan:

  • Sertakan file tersembunyi dan direktori tersembunyi.
  • Jadilah satu perintah tunggal dengan bendera untuk menyertakan di atas.
  • Tidak perlu mengandalkan pola pencocokan sama sekali.

Peretasan saya yang jelek, tetapi berhasil, adalah:

cp -r /etc/skel/* /home/user
cp -r /etc/skel/.[^.]* /home/user

Bagaimana saya bisa melakukan ini semua dalam satu perintah tanpa pencocokan pola? Bendera apa yang perlu saya gunakan?


297
2017-10-27 19:46


asal


Lebih banyak jawaban di sini, meskipun mereka tidak terlihat bagus; serverfault.com/questions/3154/… - Roel Van de Paar
Tolong, Eleven81, pertimbangkan untuk mengubah jawaban yang diterima untuk yang diberikan oleh @bruno pereira, karena itu menghindari membuat folder baru. Jika tidak, biarkan komentar ini menjadi peringatan bagi pembaca baru untuk memeriksa juga jawaban (paling banyak) lainnya. Tx. - Dr Beco


Jawaban:


Jangan tentukan file:

cp -r /etc/skel /home/user

(Perhatikan itu /home/user tidak harus sudah ada, atau yang lain akan dibuat /home/user/skel.)


215
2017-10-27 19:55



Apakah mungkin menggunakan sesuatu yang mirip jika /home/user/skel  tidak ada? - bradley.ayers
@ bradley.ayers Saya pikir seseorang dapat menyalin ke dalam subdirektori sementara lalu memindahkannya ke tingkat atas (karena bergerak di drive yang sama cepat). Kurang dari ideal, tetapi lebih pendek dari solusi lain untuk saya. - Halil Özgür
@ bradley.ayers Jawaban Bruno di bawah ini menjawab pertanyaan Anda - Mark
Solusi ini tidak berhasil untuk saya. Itu tidak menyalin file yang tersembunyi. Saya menggunakan CentOS rilis 6.5. Solusi @ Bruno berhasil. - Technext
Di bawah ubuntu / debian ini menempatkan direktori 'skel' di dalam direktori target dan bukan file rekuren di dalam skel. Menggunakan -T(tidak ada target) per bawah untuk penggunaan yang tepat. (-rT untuk rekursif) - bshea


Katakanlah Anda membuat folder baru (atau akan membuatnya) dan ingin menyalin file ke folder tersebut setelah folder dibuat

mkdir /home/<new_user>
cp -r /etc/skel/. /home/<new_user>

Ini akan menyalin semua file / folder secara rekursif /etc/skel ke folder yang sudah ada yang dibuat pada baris pertama.


378
2017-12-12 22:00



Jika saya tidak salah, ini tidak menyalin file tersembunyi / dot. - Halil Özgür
Bekerja dengan baik untukku. Perhatikan bahwa '.' sangat penting untuk itu bekerja. - Mark
Berhasil, tapi mengapa? Tidak dapat menemukan referensi untuk ini di manual. - Julien Palard
Saya rasa ini berfungsi karena biasanya, ini akan membuat folder baru dengan nama folder terakhir di argumen pertama. Namun, karena nama itu ., perilaku ini akan mengharuskannya untuk membuat direktori yang sudah ada, sehingga hanya melewati langkah itu. - Zenexer
@Technext Global globbing default di bash tidak termasuk namafile yang dimulai dengan a ., untuk mengubah bahwa Anda perlu menggunakan shopt -s dotglob perintah sebelumnya untuk dapat menyertakan file-file itu. Jadi dengan *, secara default, Anda meminta untuk menyalin semua file secara rekursif dari direktori ini yang dapat diperluas menggunakan * (yang tidak menyertakan file tersembunyi secara default). Sementara di ujung lainnya dengan . Anda menggunakan cp untuk menyalin secara rekursif dari "direktori ini". - Bruno Pereira


bash itu sendiri memiliki solusi yang baik, ia memiliki shell option, Kamu bisa cp, mv dan seterusnya.:

shopt -s dotglob # for considering dot files (turn on dot files)

dan

shopt -u dotglob # for don't considering dot files (turn off dot files)

Solusi di atas adalah standar bash

CATATAN:

shopt # without argument show status of all shell options
-u # abbrivation of unset 
-s # abbrivation of set

59
2018-02-06 01:14



Itu berguna ketika Anda ingin menyalin hanya konten tanpa membuat direktori baru di dalam tujuan. Terutama ketika dir tujuan adalah titik mount. - kaszynek
Ini benar-benar jawaban terbaik dan sampai ke inti pertanyaan .. - Stephen
Nya setopt untuk zsh, siapa tahu ada yang bertanya-tanya. - Pat


Cara yang benar untuk melakukan ini adalah menggunakan -T (--no-target-directory) pilihan, dan salin folder secara rekursif (tanpa garis miring, tanda bintang, dll.), yaitu:

cp -rT /etc/skel /home/user

Ini akan menyalin konten /etc/skel untuk /home/user (termasuk file tersembunyi), membuat folder /home/user jika tidak ada; Namun demikian -T opsi mencegah isi /etc/skel dari disalin ke folder baru /home/user/skel harus folder itu /home/user ada.


45
2017-09-08 21:50



Jawaban yang benar. +1 - bshea
ini memang jawaban yang tepat - Gaetan


Gunakan rsync:

rsync -rtv source_folder/ destination_folder/


23
2018-02-20 13:18





Jika sumber dan direktori target Anda memiliki nama yang sama, meskipun direktori target ada, Anda cukup mengetik:

cp -R /etc/skel /home/

Ini akan menyalin direktori / etc / skel ke / home /, termasuk file dan direktori tersembunyi.

Akhirnya, Anda dapat menyalin direktori dan mengganti namanya menjadi satu baris:

cp -R /etc/skel /home/ && mv /home/skel /home/user

3
2018-05-16 08:38



Atau Anda bisa menggunakannya cp -r /etc/skel /home/user untuk mengganti nama skel untuk user... - David
Itu benar, hanya jika / home / pengguna belum ada. - Gabriel Hautclocq


rsync itu bagus, tapi pilihan lain:

cp -a src/ dst/

Dari bantuan utama:

   -a, --archive
          same as -dR --preserve=all

   -d     same as --no-dereference --preserve=links

   -R, -r, --recursive
          copy directories recursively

2
2017-08-28 17:46



Saya selalu menggunakan cp -r. Terima kasih telah menyebutkan cp -a - Pinaki Mukherjee


Anda bisa menggunakan rsync.

rsync -aP ./from/dir/ /some/other/directory/

Anda bahkan dapat menyalin ssh

rsync -aP ./from/dir/ username@remotehost:/some/other/directory/

Ada berbagai bendera yang bisa Anda gunakan:     -a, - archive # archive (-rlptgoD)

-r, --recursive
-l, --links      # copy symlinks as links
-p, --perms      # preserve permissions
-t, --times      # preserve times
-g, --group      # preserve group
-o, --owner      # preserve owner
-D               # --devices --specials

--delete         # Delete extra files

You may want to add the -P option to your command.

--partial        # By default, rsync will delete any partially transferred file if the transfer is interrupted. In some circumstances it is more desirable to keep partially transferred files. Using the --partial option tells rsync to keep the partial file which should make a subsequent transfer of the rest of the file much faster.

-P               # The -P option is equivalent to --partial --progress.   Its  purpose  is to make it much easier to specify these two options for a long transfer that may be interrupted.

Halaman manual Rsync


2
2018-01-17 17:32