Bagaimana cara menyalin jalur direktori penyimpanan file di Linux?

88

Saya memiliki proyek Eclipse dan file ".project" di dalamnya, struktur direktori terlihat seperti ' myProject/.project'. Saya ingin menyalin file '.project' ini ke direktori lain, tapi saya ingin nama direktori terlampir dipertahankan.

Katakanlah saya punya ' a/myProject/.project', saya ingin menyalin ' myProject/.project' ke ' b', jadi ' b/myProject/.project', tetapi ' b/myProject' tidak ada. Ketika saya mencoba di:

 cp -r ./myProject/.project ../b

itu hanya menyalin file '.project' itu sendiri, tanpa direktori 'myProject'. Mohon saran.

dhblah
sumber

Jawaban:

153

Switch yang Anda butuhkan adalah --parents, misalnya:

jim@prometheus:~$ cp --parents test/1/.moo test2/
jim@prometheus:~$ ls -la test2/
total 42
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 .
drwxr-xr-x 356 jim jim 43136 2010-09-14 09:32 ..
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 test
jim@prometheus:~$ ls -la test2/test/1/.moo
-rw-r--r-- 1 jim jim 0 2010-09-14 09:32 test2/test/1/.moo
James Yale
sumber
7

Gunakan tardengan sesuatu seperti:

mkdir b; tar cpf - myProject/ | tar xpf - -C b/

(Tidak diuji. Coba jalankan dulu atau coba dalam skenario maket.)

lorenzog
sumber
bekerja dengan sangat baik! Di mac: mkdir b; tar -c -f new.tar $ (cat myP); tar -x -f new.tar -C b /; #myP adalah file teks dengan daftar path-to-file yang akan disalin
alexey
4

Pertama digunakan mkdir -puntuk membuat folder tujuan dengan pembuatan jalur orangtua rekursif. Kemudian salin konten ke folder tujuan:

mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project
Weimin
sumber
3
cp -P a/myProject/.project b

Lihat man cpuntuk informasi lebih lanjut.

Maxfer
sumber
Ini sepertinya tidak membantu. Ini hanya menyalin '.proyek' itu sendiri ke dalam b, tetapi tidak menyalin 'proyek saya'.
dhblah
3

Saya menggunakan cpio dalam kombinasi dengan find. Penjelasan di sini .

Contoh untuk use case Anda:

find /a/myProject/.project/ -type f | cpio -p -dumv /b/.

Perintah ini menemukan semua file di dalam /a/myProject/.project/dan salinan, sambil mempertahankan path, semua file yang ada di dalamnya.

Alex Avlonitis
sumber
1
.project adalah file, bukan dir!
ddbug
1

Selain --parentsitu juga diperlukan untuk menambahkan -ropsi untuk menghindari menghilangkan salinan direktori paling dalam

$ cp --parents test/1/.moo test2/
cp: omitting directory ‘test/1/.moo’

Jadi perintah yang bekerja untuk saya adalah

$ cp --parents -r test/1/.moo test2/
cml.co
sumber
0

Perlu diketahui bahwa tampaknya ada bug di cp --parents. Ketika saya menggunakannya --parentsbersama --preserve=all, atribut tanggal dan waktu BEBERAPA direktori tujuan TIDAK dilestarikan.

Tautan berikut tampaknya mengonfirmasi bahwa ini adalah bug: bug # 8767: cp: --preserve = semua tidak berfungsi untuk orang tua ketika --parlemen digunakan .

Jadi sepertinya Anda tidak bisa bergantung pada atribut yang dipertahankan saat menggunakan --parentsbersama seperti --preserve=allatau -p.

chandra67
sumber
-3

Saya menggunakan --parentsdengan cpperintah dan bekerja dengan saya. untuk lebih jelasnya selalu gunakan manual. Terima kasih.

sys0dm1n
sumber
3
Tidak menambahkan apa pun ke 5 jawaban lainnya.
Pemburu Rusa
Harap dicatat bahwa .project di Eclipse adalah file, bukan direktori. Jadi misal mkdir -pa / .project tidak masuk akal.
ddbug