Linux'ta komut satırı özyinelemeli / derin dizin kopyalama?


13

Çoğu durumda işe yarayan Linux'ta özyinelemeli / derin bir dizin kopyası oluşturmanın iyi ve genel bir yolu nedir? cp -ROldukça özenli cpiobüyüler gibi basit şeyler kullandım . Birini diğerine tercih etmenize neden olan önemli güçlü veya zayıf yönler var mı? En çok hangisini kullanıyorsunuz?

Yanıtlar:


29
NAME
cp - copy files and directories

-a, --archive
   same as -dpR

-d     same as --no-dereference --preserve=links
-p     same as --preserve=mode,ownership,timestamps
-R, -r, --recursive
    copy directories recursively

Sorunuza cevap olarak:

cp -a /foo /bar

Sembolik bağlantıları ve dosya / dizin 'mod' 'sahiplik' & 'zaman damgalarını' korurken her şeyi dizin / foo'dan dizin / çubuğa özyinelemeli olarak kopyalayın.


Bu kesinlikle çok basit ve zarif bir çözümdür. Bu yaklaşımın herhangi bir dezavantajı buldunuz mu? Dağıtılmış dosya sistemleri? Son derece büyük kopyalar mı? Bazı durumlarda daha verimli olmak için cpio, tar veya rsync gibi başka çözümler buldunuz mu?
Greg Mattes

1
Fiziksel bir hata olmadıkça, bellekten (NFS veya Samba montajına bakılmaksızın) yerel olarak monte edilen herhangi bir yere yerel bir 'cp' hatası vermedim (sadece TB boyutlu transferler yaptım). Eğitici bulacağınız örnekler için rsync man sayfasının altındaki 'USAGE' yazısını inceleyin. En sevdiğim: $ rsync --partial --progress --rsh = ssh --archive --verbose --compress foo / user @ hosname: ~ / bar (rsync -avzP)
Gareth

Yukarıda belirttiğim gibi, -a kesinlikle taşınabilir değildir.
Matthew Flaschen

Ben meşgul kutusu, GNU ve BSD cp tamam biliyorum. Eski Unix kutuları dışında bunun üzerinde neyin işe yaramayacağını hiç görmedim? Zoredache'nin "Her zaman işi doğru yapmak gibi görünüyor, bu yüzden bir yedek bulmak hiç bu kadar zor olmamıştı."
Gareth,

@gyaresu Lütfen oylayabilmemiz için ikinci yorumunuzu başka bir cevaba ayırmayı düşünün.
Greg Mattes

6

En sık "cd $ srcdir; tar -c. | Tar -C $ destdir -x" gibi bir komut kullanıyorum . Ama aynı zamanda rsync -a $ src $ dst kullanıyorum.

Katran çözümünün en büyük gücü, yıllar önce bir sistemde kullanmak zorunda olduğum şeydi, cpio, rsync veya yinelemeli olarak kopyalanacak bir cp'ye sahip değildi. Tar hemen hemen her yerde. Kafamda sıkıştı çünkü çok kullandım, muhtemelen daha zarif yollar var. Her zaman işi doğru şekilde yapıyor gibi görünüyor, bu yüzden gerçekten bir yedek bulmak için çok uğraşmadım.


"Zeminin yaygınlığı" iddiasını çok seviyorum. Diğer düzenleme ortamlarını tercih etsem de benzer nedenlerle vi konusunda yetkinim.
Greg Mattes

-R çoktan beri standardın bir parçası ( opengroup.org/onlinepubs/009695399/utilities/cp.html ) -a değil.
Matthew Flaschen

@Matthew Flaschen: Yorumunuz @ gyaresu'nun cevabı için mi tasarlandı?
Greg Mattes

Zoredache'nin "özyinelemeli olarak kopyalayabilecek bir cp'ye sahip olmayan bir sistemle" karşılaştığı gibi, bununla da ilgili. Temel olarak, -R -> taşınabilir, -a -> taşınabilir değil.
Matthew Flaschen

1
Bu ~ 95 yaşındaydı ve sistem 80'lerin sonlarında Unix sürümünü çalıştırıyordu. -R'nin cp için bir seçenek olduğunu düşünmüyorum, ama emin değilim. Usbeti okuyarak bu çöplüğü öğrendim.
Zoredache

6

Bir rsync göz atın ... Seviyorum çünkü iki dizini güncel tutarken daha az veri kopyalarsınız ... aynı zamanda uzaktan da çalışabilir. En basit haliyle rsync -a / src / dest


Bu gerçekten iyi bir nokta. Aslında rsync bir "dizin fark" hesaplamak ve sadece dizinleri senkronize etmek için gerekli olanı transfer yeteneğine sahiptir. Böylece rsync -a src / dest gibi dizinleri sürekli olarak "sürekli olarak kopyalamak" için (düzgün senkronizasyon için izleyen / on src gereklidir), cp -a src / dest böyle çalışmaz. Cp komutu, ilk cp'den sonra dest içinde yeni bir src dizini oluşturur. Sonraki kopyalar için cp -au src / * dest gibi bir şeye ihtiyacınız olacaktır.
Greg Mattes

Ben rsync gibi diğer bir nedeni, bir ilerleme çubuğu gösteren -P bayrağı geçirebilirsiniz olmasıdır. Size bir şeyin ne kadar süreceği hakkında bir fikir verir
Rory

0

rsyncharika bir araçtır. Veri aktarımı İsviçre çakısıdır. Çok basit ve güçlü bir araç. Kullanmaya başladığınızda bağlanırsınız.

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.