SCP ile yalnızca belirli bir tarihle eşleşen dosyaları kopyalamak mümkün mü?


7

SCP'nin kopyaladığı dosyaları tarihe göre filtrelemesi mümkün mü, örneğin, 12/29 tarihinde oluşturulan tüm dosyaları kopyalamak ve diğerlerini yoksaymak istiyorsanız?

Yanıtlar:


5

Bunu doğrudan yapamazsın scp. Unix yolu, araçları birleştirmek, findkomutu istersiniz .

Belirli bir tarihe sahip bir dosyayı aramaya bir örnek:

touch --date "2007-01-01" start
touch --date "2008-01-01" end
find -type f -newer start -not -newer end

Bu örneği buradan aldım: http://www.cyberciti.biz/faq/linux-unix-osxfind-files-by-date/

Bunu scp'ye beslemek için şunu yapabilirsiniz:

find -type f -newer start -not -newer end -exec scp {} dest: \;

Bu, dosya başına bir defa scp çağıracak, bu yavaş olabilir çünkü her seferinde bağlantıyı kurması gerekir. Yalnızca bir avuç dosyanız varsa ve adlarında hiç boşluk yoksa, bunu yapabilirsiniz:

scp `find -type f -newer start -not -newer end` dest:

1
Dosyaları istemciden sunucuya kopyaladığınızda kolaydır, peki ya diğer yoldan?
Petr Peller

2
@PetrPeller Ters yönde kopyalamak için şunu yapabilirsiniz:scp dest:`ssh dest find -type f -newer start -not -newer end` .
Edward Betts

0

Kopyalama modunda 'cpio' kullanarak bir SSH kanalı üzerinden kopyalanan etkili (tek satır!) Bir alternatif (@sudodus). Belki de zaman / dakika / daha yeni testleri kullanarak bulma argümanlarını istediğiniz gibi uyarlayabilirsiniz.

Kesin tarih ve saat testinizi almak için kaynak sisteminizde doğru saat ve tarih ile sahte bir dosya oluşturun, find -newer testini kullanın veya man sayfasının -newerXY testini kullanın. Bkz. Https://linux.die.net/man/1/find

Uzak sistemde çalışan find komutunun çıktısı güvenli bir şekilde yerel sisteme ssh ile geri aktarılır ve kaydedilir.

İhtiyacınız olan her şeyi yapıyor gibi görünüyor, ancak 'scp' kullanmıyor - bu sizin işaretlemenizi etkileyebilir. Ancak, Unix yaklaşımı olan Unix araçlarının bir kombinasyonunu kullanıyor!

Her durumda, scp en sık karşılaşılan durumlar için bir kısayoldur, dosyaların filtrelenmesi gerektiğinde bu yaklaşım daha güçlüdür.

ssh username@ip-adress '(cd /path/to/sourcedir; find . -print | cpio -oBav -Hcrc)' | ( cd /path/to/targetdir && cpio -ivumd )

https://askubuntu.com/questions/1080590/how-to-use-find-in-scp-command

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.