Hangi dosyaların cp komutuyla kopyalanacağı nasıl test edilir?


11

DIRECTORYA'da DIRECTORYB'de bulunmayan tüm dosyaları kopyalayan basit bir komut dosyası oluşturuyorum. Bunu cp komutunu kullanarak yapıyorum:

cp -u DIRECTORYA/* DIRECTORYB

Yapmak istediğim şey, bir yöneticiye kopyalanan dosyaları listeleyecek bir e-posta göndermek.

İdeal olarak, yukarıdaki komutu çalıştırmadan önce, kopyalanacak dosyaları almak ve e-posta iletimi oluştururken daha sonra kullanmak üzere bir değişkende saklamak istiyorum.

Birisi beni doğru yönde gösterebilir mi? Ben grep kullanarak içine baktım ama bu cp komutu ile yapılabilir sanmıyorum?


1
Belki sorunuzu yanlış anlıyorum, ancak -vdosya adlarını kopyalanırken yazdırmak için bayrağı kullanamıyor musunuz? Bunu bir dosyaya veya doğrudan bir değişkene yönlendirin ve mesajınızı oluşturmak için kullanın.
ThibautRenaux

Ayrıca cpkomut, --attributes-onlydosya verilerini değil yalnızca dizin ve dosya yapısını kopyalamaya izin veren bir seçeneğe sahiptir.
Costas

Üzgünüm, senaryo yazma konusunda oldukça yeniyim. -V bayrağını kullanırsam, dosya yerine bir değişkene nasıl çıktı verebilirim?
James

1
Eğer bash kullandığınızı varsayarsak variable=$(cp -v ...), cp stdout'unu yakalar. Bkz. Gnu.org/software/bash/manual/html_node/Command-Substitution.htm
Gowtham

Yanıtlar:


4

cpEğer oyunculuk yapmadan ne yapacağını görmek istiyorsanız GNU'nun size yardımcı olacak hiçbir şeyi olmadığını düşünüyorum . Değiştirilen dosyaları günlüğe kaydetmek istiyorsanız, -vseçeneği kullanabilirsiniz :

cp -puv DIRECTORYA/* DIRECTORYB >copy.log

Bunun yerine, çok daha güçlü olan ve düşük uçlu gömülü sistemler (ve varsayılan olarak mevcut olmadığı yere kolayca kurulabilir) dışında hemen hemen her yere kurulan rsync'icp kullanabilirsiniz .

rsync -aun DIRECTORYA/* DIRECTORYB >what-would-be-done.txt

veya

rsync -auv DIRECTORYA/* DIRECTORYB >copy.log

3

Göre manuel sayfa ,

-u, yalnızca SOURCE dosyası hedef dosyadan daha yeni olduğunda veya hedef dosya eksik olduğunda kopyalayın--update

Bu, biri komut dosyasında uygulanması önemsiz ( eksik ) diğeri de biraz çalışma gerektiren ( daha yeni ) olmak üzere iki testi birleştiren bir özelliktir . Sen kullanarak gerekli olduğunu bildiren bir komut dosyası yapabilir comm, diffve test.

Standart cpyardımcı programların hiçbiri bir kopyalama işlemini kuru çalıştırma özelliği sunmaz. Önerildiği gibi, rsyncbunu yaygın olarak bulunan bir yardımcı programla yapmanın yoludur. Elbette rsync, genellikle daha yeni veya eksik olandan daha fazla ölçüt temelinde kopyalamak için kullanılır (dosya boyutu ve zaman damgaları da kullanılır). Ama adil yapmak için azaltılabilir cp -u.

Standart olmayan yardımcı programlar için, copy1980'lerin sonunda yazdığım (ve elbette hala kullandığım) yardımcı program var . makeEklediğim ilk seçenek olduğu için muhtemelen yardımcı programdan ilham aldı -n.

Verilen örnek için şu şekilde kullanılır:

$ copy -nvU DIRECTORYA/* DIRECTORYB
** copy DIRECTORYA/foo to DIRECTORYB/foo
** 1 file would be copied, 616 bytes

Daha fazla okuma:

  • copy - dosya / dizin kopyalama yardımcı programı

    -n dosyaların gerçek oluşturulmasını veya değiştirilmesini devre dışı bırakır ve (ayrıntı düzeyine bağlı olarak) copy komutun sahip olacağı efekti gösterir .
    -u dosyaları yalnızca boyutları veya değişiklik tarihleri ​​farklıysa kopyalar ve yalnızca bağlantı metni farklıysa bağlanır.
    -U yalnızca hedeften daha yeni olan veya hedefte bulunmayan dosyaları kopyalar.

  • Ağustos 1988'den changelog girişi :

    1988/08/16    
            * src / copy / src / copy.c: "-d" ve "-n" seçenekleri eklendi.
    

2

Eğer koşmak istiyorsan cp foo*bar whatever, koş echo foo*bar whatever.


1
Ama OP koşmak istiyor cp -uve cp için kuru koşmak gibi bir seçenek arıyor.
Arkadiusz Drabczyk

0

Diff komutunu kullanabilirsiniz. Her gün bazı yedek dosyaları kopyalayan bir işim var. bir süre tüm dosyaların kopyalanıp kopyalanmadığını kontrol etmem gerekiyor, burada sözdizimi:

diff /file1/ /file2/

ve elbette bunları kopyalamak istiyorsanız şunları kullanın:

cp -u /file1/* /file2

0

Bunun yerine rsync kullanmayı düşünün. Rsync, yerel kopyalarda mükemmel bir şekilde çalışır ve sahip olduğu on beş gazilyon seçeneğinden geçtikten sonra kesinlikle istediğinizi yapabilir.

rsync -avun DIRECTORYA/ DIRECTORYB

size yapılacak her şeyi gösterecek ve

rsync -avu DIRECTORYA/ DIRECTORYB

yapacağım.

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.