it-swarm.asia

'Cp' komutunu kullanarak dizin içeriğini kopyalayın

Bir dizinin tüm içeriğini bir başkasına nasıl kopyalarsınız?

Örneğin:

$ cd /home/newuser
$ cp -a /backup/olduser/* .

Yukarıdaki problem, '*' küre şeklinin gizli dizinlerle eşleşmesidir. ' ve '..' ve içerik olarak 'newuser' içinde 'olduser' dizini oluşturursunuz.

Bunun gibi bir şey de yapabilirsiniz:

$ rmdir /home/newuser
$ cp -a /backup/olduser /home/newuser

Peki ya yeni kullanıcı zaten bazı varsayılan dosyalar ve dizinler içeriyorsa?

Sadece basit 'cp' komutunu ve kabuğu kullanarak bir dizinin içeriğini bir başkasına taşımak için en basit, en doğru, en kolay ve en karmaşık olan nedir?

33
nomount

Deneyin:

cp -ra /backup/olduser/. /home/newuser
30
nagul

İki dizin a ve b.

İkisinde de dosya var.

A ve b'yi içeren bir dizindesiniz.

cp -r ./a b

-r = tekrarlı olarak.

23
Rich Bradshaw

Ayrıca, varsayılan olarak cp'nin, eğer varsa ilk dizini ikinci dizine kopyaladığını unutmayın. Örneğin, cp -a a b, b varsa, bir INTO b kopyalar, yani b'ye bir oluşturur.

İstediğiniz şey değilse ve içerik 'yi bir b'ye kopyalamak istiyorsanız (örneğin, bütün bir dosya sistemini bir bağlama noktasına kopyalarken) kullanın:

cp -a a/. b

önceki cevapta olduğu gibi.

Lütfen ayrıca -a-r içerdiğini ve -ar 'nin gereksiz olduğunu unutmayın.

18
Nicolas Bonnefon

Shell'inizi ciddi bir şekilde yeniden yapılandırmadıysanız, '*' globbing modeli 'ile eşleşmiyor.' veya '..', sadece echo * kullanarak doğrulayabildiğiniz gibi. Bunun yerine yaptığı şey, adı '.' İle başlayan dosyaları atlamaktır, bu nedenle yaklaşımınız tüm gizli dosyaları kaçıracaktır. Bu seçeneklerden bazılarını Shell seçenekleriyle, örneğin bash'daki dotglob seçeneği ile yapabilirsiniz, ancak o zaman aradığınız taşınabilir ve sağlam seçenek olmaz.

Bunu bir veya iki defadan fazla yapmanız gerekiyorsa, özenle hazırlanmış kaynak ve hedef özellikleriyle rsync veya unison (belirli ihtiyaçlara bağlı olarak) aramanızı öneririm.

Başka bir alternatif ise kaynak dizinini bir tarball'a koymak ve mevcut hedef dizini üzerinden açmaktır.

6

Bu, ana dizini (..) hariç tutarken hem normal hem de gizli dosyaları kopyalar:

cd /directory/to/copy
cp -r * .[^.]* /destination/directory

Üst dizini dışlamazsanız, hedef dizininizdeki .. içeriğinin tümü ile bitirdiniz.

2
mch

Bu, gizli dizinler dışındaki tüm dosyaları ve dizinleri geçerli dizinden tekrar tekrar nereye kopyalamak için çalışır:

cp -rf * ^.* 
0
Seeeve

Nokta ile başlayan dosyaları kopyalamak için sadece cp yapın. * Target /

Bu yüzden en kolay olanı sadece cp komutunu iki kere yapmak.

Peter Eisentraut sais'in normal globbing kurallarını içermesi gibi .. ve. (hm, bu cümleyi nasıl bitirebilirim?;)

Özyinelemeli yapmak için -r, cp'yi bir dosyanın üzerine yazmak isteyip istemediğinizi sormak için -i kullanın.

cp -ri /backup/olduser/* /newuser/
cp -ri /backup/olduser/.* /newuser/
0
gaqzi