Bazı dosyaları ve dizinleri (ssh üzerinden belirli olanlar hariç) nasıl kopyalarım?


23

Linux komut satırını kullanarak, scptüm dosyaları ve klasörleri belirli bir dizinden kopyalamak için komutu kullanıyorum . Ancak, nadiren değiştirdiğim şeyleri kopyalamak için tiny_mceklasörüm gibi bant genişliği tüketmeyi sevmiyorum . Her şeyi kopyalamanın püf noktası nedir, ancak kısa bir klasör listesini atlayın?

Yanıtlar:


19

rsynciyi çalışır ve çoğu durumda, taşıma protokolü olarak SSH'yi otomatik olarak kullanır. Dosyaları karşılaştırır ve yalnızca değişen dosyaları yükler - ancak ağaçta herhangi bir şekilde senkronize edilmemesi gereken dosyaları belirtmek için bir dışlama listesi de kullanabilirsiniz .


rsync yok değil otomatik SSH kullanmak - Bunu yapmak için "-e ssh" bayraklarını sunmak zorundadır.

4
Evet öyle. Rsync 2.6.0 yayımlandı - Yapılandırmayı başka bir şey yapmak istediğinizi söylemediğiniz sürece varsayılan uzak kabuk şimdi "ssh" dır. samba.org/rsync

12

Yalnızca değişen dosyaları kopyalayan, ssh üzerinde de çalışan rsync'i deneyebilirsiniz .


9

Kullanmak rsync --excludeburadaki en belirgin seçimdir, ancak gerçekten sadece birkaç dosya veya klasör göndermek ve dışlamak için özel bir şeye sahip olmak istiyorsanız, kabuk taşmayı kullanabilirsiniz scp. Öncelikle, kabuğunuzda doğru glob seçenekleri olduğundan emin olun. Bash koşusu shopt -s extglobve zsh kullanımı için setopt ksh_glob. Sonra böyle bir şey:

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@host:target_path

... verilen şablonla eşleşen şeyler dışında kaynak klasördeki her şeyi kopyalar. Belli ki o kısımla yaratıcı olabilirsin.


7

rsync iyi bir çözümdür, ancak alternatif arıyorsanız:

Diyelim ki, "foo, bar, baz" dizinlerini içeren "test" dizinimiz var. Bu dosyalarda, farklı dosya türlerinden bir demet vardır:

test
|____bar
| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
|____baz
| |____1.avi
| |____2.avi
| |____3.png
|____foo
| |____test.blah
|____test.txt

PNG'ler dışındaki her şeyi kopyalamak istiyoruz

scp $(find /location/of/test -type f ! -name "*.png") # -> Note the logical NOT!!

Bu örnekte, komut tüm dosyaları aynı hedef dizine koyacaktır - istediğiniz davranış olmayabilir.


1
Bu cevabın sadece ilgili dosya ve dizin isimlerinin herhangi bir özel kabuk karakteri (boşluk veya \[*?) içermemesi durumunda işe yaradığını unutmayın .
Gilles 'SO- kötülük olmayı bırak'

3

Denemek isteyebileceğiniz harika bir araç "lftp".

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/

RSync'i ssh üzerinden de kullanabilirsiniz.

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/

Çalışmalı.


0

Sadece bitmiş yazma tercihim nasıl ahenk rsync bunun beri, herhangi bir gün

  • ulaşım için ssh dışında bir servise ihtiyaç duymaz
  • her iki taraftaki dosyaları herhangi bir zamanda değiştirmeme izin veriyor - çoklu ustalar kolayca, sadece bir taraftan bir senkronizasyon isteği göndermem gerekiyor
  • Modtimes, öznitelikler / izinler, softlinks vb. Söz konusu olduğunda ben bir takıcıyım. Bir proje için, biri cygwin sunucusu olan 4 ayna bile kullanıyorum. Örnek crontab kurulumuma bakın.
  • gibi istisnaları destekler *.bak. Config dosyamdaki örnekler

0

Güvenli Kopyalamayı Kullanma - scp

scp -r file user@host:

Birçok dosyayı kopyalamak için

scp /directory/* user@host:destinationPath

Bazı dosyaları kopyalamak için

scp /directory/!(*.doc) user@host:destinationPath

.Doc dosyaları dışındaki dizinin içeriğini kopyalar


0

Kesinlikle rsync tavsiye ederim.

rsync -vra --exclude = "hariç tutmak istediğiniz şey" -e ssh klasörü user @ remotehost: / folder


0

Hedef sunucudan çalıştırdığımda bu benim için çalıştı.

rsync -av --progress user@servername:/sourcefolder /destinationfolder --exclude thefoldertoexclude

0

tiny_mceDizini yoksaymak için iki adımda yapabiliriz . Tüm dizinlerin küçük harflerle başladığını varsayalım.

scp -r USER@HOSTNAME:~/FOLDER/[a-s]* .
scp -r USER@HOSTNAME:~/FOLDER/[u-z]* .

Ayrıca, USER, HOSTNAME ve FOLDER öğelerini gerçek değerlere değiştirin.

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.