Yanıtlar:
Oluşturulacak son yaprak dizininden daha fazlasına sahipseniz, ssh ... mkdir -p
önce ayrı bir dizin çalıştırabilir veya burada açıklanan şekilde --rsync-path
numarayı kullanabilirsiniz :
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
Veya --relative
seçeneği Tony'nin önerdiği şekilde kullanın . Bu durumda, oluşturulacak kaynağın dizin yapısını değil, yalnızca bulunması gereken hedefin kökünü belirtirsiniz:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
Bu şekilde / pre_existing / dir / new / x / y / z / ile sonuçlanacaksınız.
Ve "y / z /" oluşturmak, ancak "new / x /" içinde olmamak ./
istiyorsanız --relative
, başlamak istediğiniz yeri ekleyebilirsiniz :
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
/ pre_existing / dir / y / z / oluşturur.
&&
mı?
Rsync'i bağlamak için ssh kullandığınızı varsayarsak, daha önce bir ssh komutu göndermeye ne dersiniz:
ssh user@server mkdir -p existingdir/newdir
zaten varsa hiçbir şey olmaz
rsync
bu nedenle yanıt vermez.
ssh
Desteklenmiyorsa ve uzak uçtaki rsync
bağlantı noktasına bağlanırsa bu bir seçenek değildir rsync daemon
.
-R, --relative
Seçenek yapacağız.
Örneğin: /var/named/chroot
uzak sunucuda aynı dizin yapısını yedeklemek ve oluşturmak istiyorsanız -R
, bunu yapın.
/./
Kaynak yolda kullanarak oluşturulacak yolun yalnızca bir bölümünü de belirleyebilirsiniz . Ayrıntılar için kılavuz sayfasına bakınız.
rsync
hedef klasörler yoksa otomatik olarak dizin oluşturmaz. İç çekmek.
--relative
. Düşündüğünüzü yapmayabilir.
--relative
ile birlikte /./
çoğu yeni ne arayacak. rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
masaüstünün içeriğini hedef masaüstüne kopyalar. Kullanıcı adlarındaki farklılıkların bunu nasıl etkileyebileceğini bilmiyorum.
bu benim için çalıştı:
rsync /dev/null node:existing-dir/new-dir/
Bu mesajı alıyorum:
skipping non-regular file "null"
ama etrafta boş bir dizin olması konusunda endişelenmem gerekmiyor.
Bunu bir rsync komutuyla yapabileceğinizi düşünmüyorum, ancak ilk olarak şu şekilde ekstra dizini 'oluşturabilirsiniz':
rsync --recursive emptydir/ destination/newdir
burada 'emptydir' yerel bir boş dizindir (önce geçici bir dizin olarak oluşturmanız gerekebilir).
Biraz hack, ama benim için çalışıyor.
şerefe
Chris
rsync /dev/null node:existing-dir/new-dir/
Yukarıdaki öneriye bakın .
Bu cevap diğer cevapların bitlerini kullanır, ancak umarım şartlara göre biraz daha açık olacaktır. Neyi rsyncing yaptığınızı hiç belirtmediniz - tek bir dizin girişi veya birden fazla dosya.
Öyleyse, sadece içindeki dosyaları taşımakla kalmayıp bir kaynak dizin girdisini de taşıdığınızı varsayalım.
Diyelim ki yerel olarak adlandırılan bir dizininiz var data/myappdata/
ve bunun altında bir sürü alt dizin var. You have data/
hedef makinede ama hayır data/myappdata/
- bu kolay yeterlidir:
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
Uzak dizin için farklı bir ad bile kullanabilirsiniz:
rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname
Yalnızca bazı dosyaları taşıyorsanız ve bunları içeren dizin girişini taşımıyorsanız, şunları yaparsınız:
rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/
ve myappdata
dosyalarınızı yerleştirmek için uzak makinede sizin için bir data/
dizin oluşturur . Yine, dizinin uzak makinede bulunması gerekir.
Bu arada, -rvv
bayrağı kullanmam iki kat ayrıntılı çıktı elde etmektir, böylece ne yaptığı ve aynı zamanda yinelenen davranışlar hakkında nettir.
Sadece rsync kullanırken ne elde ettiğimi göstermek için (Ubuntu 12.04'te 3.0.9)
$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine's password:
sending incremental file list
created directory /tmp/newdir
delta-transmission enabled
bar.txt
foo.txt
total: matches=0 hash_hits=0 false_alarms=0 data=0
Umarım bu biraz temizler.
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
ama hedefte yarattığı / remote / path / to / data / myappdata / myappdata /
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
mkdir
, bu yüzden kesmek kullanıyorum:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
ekstra bir dosya oluşturur, ancak daha sonra kaldırabilirsiniz.