Bagaimana cara menyalin pohon direktori tetapi tidak file di Linux?


17

Saya ingin menyalin sekitar 200 direktori & subdirektori dari satu lokasi ke lokasi lain, tetapi saya tidak ingin menyalin ribuan file di dalam direktori tersebut. Saya di Linux.

Catatan: Saya tidak punya cukup ruang untuk menyalin semuanya lalu menghapus semua file.

Jawaban:




5

Pendekatan lain adalah dengan find dan mkdir :

find SOURCE -type d -exec mkdir TARGET/{} \;

Pastikan TARGET sudah ada atau gunakan opsi -p dari mkdir.


3

Anda juga dapat melakukan:

find inputdir -type d | cpio -pdumv destdir

Kekuatan kesederhanaan;)


1

Demikian pula, menggunakan tar (GNU):

find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)

Anda tidak benar-benar memerlukan -print0baris perintah pada temukan atau -0pada baris perintah rsync kecuali Anda memiliki nama file yang berisi karakter baris baru (yang mungkin tetapi sangat tidak mungkin). Tar (dan rsync, dan cpio) membaca nama file baris demi baris; menggunakan terminator NULL sebagian besar berguna xargs, yang biasanya membaca nama file yang dipisahkan dengan spasi putih (dan karenanya tidak menangani file / direktori dengan spasi tanpa nama -0).



-1
cp -al 

Akan menyalin semua file dengan tautan keras. Struktur yang sama, izin yang sama. (catatan: tautan keras, jadi tidak ada penyimpanan yang hilang.)


Tidak mungkin membuat tautan keras melintasi batas
MountainX-for-Monica

Benar, tetapi tidak dikatakan bahwa itu lintas sistem file ...
SvennD

-1

ls -d * / @source: find. -type d -print0> dirs.txt @destination: xargs -0 mkdir -p

Ini akan menyebabkan kedua perintah menggunakan nulls sebagai pemisah alih-alih spasi putih. Perhatikan bahwa urutan -tipe d dan -print0 penting!


Ini tidak jelas dan tampaknya salah. Tampaknya itu @sourcedan @destinationmerupakan indikasi bagi pembaca, tetapi meskipun demikian ini tidak berhasil.
Law29
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.