Bir dizin ağacını nasıl kopyalarım ancak Linux'ta dosyaları nasıl kopyalarım?


17

Yaklaşık 200 dizin ve alt dizini bir konumdan diğerine kopyalamak istiyorum ancak bu dizinlerdeki binlerce dosyayı kopyalamak istemiyorum. Linux'tayım.

Not: Her şeyi kopyalayıp sonra tüm dosyaları silmek için yeterli alanım yok.

Yanıtlar:




5

Başka bir yaklaşım find ve mkdir ile :

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

TARGET'in zaten var olduğundan emin olun veya mkdir'in -p seçeneğini kullanın.


3

Ayrıca şunları da yapabilirsiniz:

find inputdir -type d | cpio -pdumv destdir

Sadeliğin gücü;)


1

Benzer şekilde, (GNU) katranı kullanarak:

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

Yeni satır karakterleri içeren dosya adlarınız yoksa (bu mümkün, ancak olası değildir) gerçekten -print0find komut satırında veya -0rsync komut satırında olması gerekmez. Tar (ve rsync ve cpio) dosya adlarını satır satır okur; NULL sonlandırıcı kullanmak çoğunlukla xargs, boşlukla ayrılmış dosya adlarını okuyan (ve bu nedenle adlarında boşluk olmayan dosyaları / dizinleri işlemeyen) yararlıdır -0.



-1
cp -al 

Sabit bağlantıları olan tüm dosyaları kopyalar. Aynı yapı, aynı izinler. (not: sabit bağlantılar, böylece depolama kaybı olmaz.)


Dosya sistemi sınırları boyunca sabit bağlantılar oluşturmak mümkün değildir
MountainX-for-Monica

Doğru, ama dosya sistemi arasında olduğu söylenmedi ...
SvennD

-1

ls -d * / @source: bul. -tipi d -print0> dirs.txt @hedef: xargs -0 mkdir -p

Bu, her iki komutun da boşluk yerine ayırıcı olarak null kullanmasına neden olur. -Tip d ve -print0 sırasının önemli olduğunu unutmayın!


Bu net değil ve yanlış görünüyor. Öyle görünüyor ki @sourceve @destinationokuyucunun endikasyonlarıdır, ancak buna rağmen bu işe yaramaz.
Law29
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.