PuTTY kullanarak dosyaları bulun ve indirin


1

SSH üzerinden bir Mac'e bağlanmak ve find komutunu kullanarak belirtilen dosyaları indirmek için PuTTY kullanmaya çalışıyorum. Dosyaların içinde sorunlara neden olabilecek boşluklar var ve nasıl yerel bir Windows yolu belirleyeceğimi bilmiyorum.

Böyle bir şeyi deniyorum, şu ana kadar başarısız:

find . -iname "*searchtext*" | xargs -0 scp user@host:{} localpath

Herhangi bir fikir?

Bir satır kullanmak mümkün değilse, PuTTY aracılığıyla çağrılabilecek bir Bash komut dosyası sorun değil mi?

Yanıtlar:


3

Uzak sunucudaki dosyaların bir zip veya tgz'sini oluştururken en iyisi

zip found-files.zip $(find . -iname "*searchtext*")

Ve sonra sadece kullan winscp found-files.zip dosyasını indirmek için. Winscp aynı macun kimliğini doğrular (şifreler veya çalışıyorsa pagent kullanır) Dos komut istemini tercih ederseniz pscp kullanabilirsiniz


(sanal +1) @Sodved Teşekkürler. Zip çözümü için gittim. Uzay sorunu ile başa çıkmak için bunu değiştirmek zorunda kaldı. @ grawity'nin önerileri yardımcı oldu. Bul -adı " arama metni "-print0 | xargs -0 zip found-files.zip ve sonra pscp user @ host: found-files.zip & lt; localpath & gt;
Vivek Ayer

1

SSH üzerinden bir Mac'e bağlanmak ve find komutunu kullanarak belirtilen dosyaları indirmek için PuTTY kullanmaya çalışıyorum.

Dosyaları yerel Windows sisteminize indirmeye mi çalışıyorsunuz?

PuTTY'nin bir SSH istemcisi olduğunu unutmayın. Tek yaptığı Mac'inize yazılı metin göndermek ve alınan çıktıyı görüntülemek. Bu nedenle koşarken scp bunun gibi, Mac’te çalışır ve dosya adlarının Mac tarafından görüldüğü gibi belirtilmesi gerekir.

Mac'ten Windows'a dosya aktarmak istiyorsanız, scp macpath user@windowshost:windowspath. (Örnek komutunuzda bunu tersine çevirmiş görünüyorsunuz.)

Bu, Windows bilgisayarınızın SCP özelliklerine sahip bir SSH sunucusuna ihtiyacı olduğu ve gelen SSH bağlantılarına izin vermesi gerektiği anlamına gelir.


Yerel bir Windows yolunun nasıl belirtileceğinden emin değilim.

Windows'a yüklediğiniz SSH sunucusuna bağlıdır. (Yukarıdaki paragrafa bakınız.) Ama genellikle, x:\dir\file dönüştürülebilir /x/dir/file. Kılavuzu oku.


Dosyaların içinde sorunlara neden olabilecek boşluklar var

Evet, bu da sorun yaratır xargs. İle doğru yöne gittiniz xargs -0, ama aynı şeyi yapmanız gerekir find - find .... -print0 veya find .... -printf "%p\0".

Eğer sürümü find Mac OS X'te hiçbirini desteklemez -print0 ne de -printf, yeni satırları ayırıcı olarak kullanmaktan kurtulabilirsiniz. Bu durumda, herhangi bir özel seçenek eklemeyin find, ama değiş xargs -0 için xargs -d '\n'.

Daha iyi bir alternatif xargs olduğu find -exec.


xargs -0 scp user@host:{} localpath

Burada bir hata daha var. Varsayılan olarak, xargs yapar değil değiştirmek {} dosya adıyla; bunu özellikle söylemelisin -I "{}".

Bunu bununla karıştırmış olabilirsiniz. -exec seçenek find, hangi yapar böyle çalış:

find . -iname "*searchtext*" -exec scp user@host:{} localpath \;

Yukarıda, ayrıldım scp argüman sırasını aynen orjinalinde olduğu gibi yapın. Ama daha önce de söylediğim gibi, yanlış.


Detaylı açıklama için teşekkürler. Evet, dosyaları yerel Windows sistemine indirmeye çalışıyorum. Bu yüzden yaklaşımım yanlış. Uzaktan çalıştırılan bir bulma komutundan çıkarılan dosyaları kopyalamak için scp (veya benim durumumda pscsp.exe) var mı? Yoksa bunu başarmanın başka bir yolu var mı?
Vivek Ayer

@Vivek: kullanabilirsiniz psftp.exe toplu iş modunda: 1) sonuçlarla bir dosya oluşturun: find .... -print | sed 's/^/get /' > psftp-batch.txt 2) dosyayı Windows makineye kopyalayın ve çalıştırın psftp -b psftp-batch.txt -bc user@machost.
grawity

Şerefe. (sanal + 1)
Vivek Ayer
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.