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.

Kyle West
sumber

Jawaban:

9
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
Ignacio Vazquez-Abrams
sumber
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.

Panos Rontogiannis
sumber
3

Anda juga dapat melakukan:

find inputdir -type d | cpio -pdumv destdir

Kekuatan kesederhanaan;)

Pilou
sumber
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).

larsks
sumber
1
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
SergioAraujo
sumber
-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.)

SvennD
sumber
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!

Ashish Karpe
sumber
Ini tidak jelas dan tampaknya salah. Tampaknya itu @sourcedan @destinationmerupakan indikasi bagi pembaca, tetapi meskipun demikian ini tidak berhasil.
Law29