Özyinelemeli, Üzerine Yazılmayan Dosya Kopyalama?


21

CoffeeScript / JavaScript dosyaları içeren diğer klasörlerden oluşan bir dizin var. CoffeeScript dosyalarını aynı klasör yapısına sahip yeni bir klasöre derleyebiliyorum.

Ne yapmak istiyorum kaynak klasördeki tüm * .js dosyaları hedef klasöre özyinelemeli kopyalamaktır. Ayrıca, hedef klasörde bulunan dosyaların üzerine yazmak da istemiyorum. Bunu nasıl başaracağınız hakkında bir fikriniz var mı?

Kullanmayı denedim cp -n source/**.js desination/ve cp -Rn source/**.js desination/başka bir benzer soruyu inceledikten sonra işe yaramıyor gibi görünüyor.

Bunu nasıl başaracağınız hakkında bir fikriniz var mı?


Rsync'e baktınız mı?
bonob

@bonob hayır. Bir veya iki kez kullandım, ancak sadece dosyaları uzaktan almak için.
AlbertEngelB

Yanıtlar:


25

Rsync kullanabilirsiniz (yerel kopya da yapar)

rsync -r --ignore-existing --include=*/ --include=*.js --exclude=* source/ destination
  • -r dizinleri tekrarlamak,
  • --ignore-existing hedefteki mevcut dosyaları yoksaymak,
  • includeve excludeortalama filtreler: Tüm * .js dosyaları dahil kalanını dışlamak, tüm dizinleri dahil; ilk içerme gerekir, aksi takdirde son hariç tutma içeriği taranmadan önce dizinleri de hariç tutar.

Son olarak, -Pilerlemeyi izlemek istiyorsanız bir a, --list-onlygerçekten kopyalamadan neyin kopyalanacağını görmek -tistiyorsanız ve zaman damgalarını korumak istiyorsanız a ekleyebilirsiniz.


Bu ilgili değil, ancak son zamanlarda rsync komutunu 15 yıl belgeyi bir bölümden diğerine taşıdığımda öğrendim. Dosyalarımın orada olduğundan emin olarak, eski bölümü sildim ve oraya başka şeyler koydum; Daha sonra fark ettim ki tüm zaman damgalarını kaybettim ve -t bayrağını keşfettim. Sadece üzüntümü paylaşmak istedim: '(


Haha, bu işe yaradı! rsyncGörünüşe göre bomba.
AlbertEngelB

3
Evet, neredeyse hiç bilmiyorum ama sorunuzu cevaplamaya çalışarak çok şey öğrendim. Gelecekte daha ileri gitmeniz gerekiyorsa, dosyalarda karmaşık filtreler tanımlayabilir ve bunları örneğin komutta çağırabilirsiniz. Ayrıca dizin başına filtrelere sahip olabilir, kopyalama sırasında verileri sıkıştırabilirsiniz ve bu sadece yüzeyini çizer!
bonob

7

Bu, cp kullanılarak da elde edilebilir. Buraya bakın:

sudo cp -vnpr /xxx/* /yyy

xxx = kaynak

yyy = hedef

v = ayrıntılı

n = hızlandırıcı yok (üzerine yazma yok)

p = izinleri koru

r = özyinelemeli


5

Man sayfalarına baktığınızda, -nseçeneği istediğiniz anlaşılıyor .

-n, --no-clobber
   do not overwrite an existing file (overrides the previous -i option)

-N kullanarak denedim, ancak bana * .js dosyaları tarafından filtre izin vermez.
AlbertEngelB

0

Benim dağıtımda kullanılabilir clobber yoktu, bu yüzden:

echo n | cp -vipr xxx yyy

xxx = kaynak

yyy = hedef

v = ayrıntılı

i = etkileşimli (üzerine yazma istemi) | bu yüzden komutun başında "echo n |"

p = izinleri koru

r = özyinelemeli

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.