ฉันจะกระจายไฟล์ / โฟลเดอร์ต่าง ๆ ในเครื่องต่าง ๆ ได้อย่างไรโดยมีเพียงการเชื่อมต่อที่ใช้ได้เท่านั้นคือ ssh
ฉันจะกระจายไฟล์ / โฟลเดอร์ต่าง ๆ ในเครื่องต่าง ๆ ได้อย่างไรโดยมีเพียงการเชื่อมต่อที่ใช้ได้เท่านั้นคือ ssh
คำตอบ:
คุณสามารถทำได้ด้วยการทดแทนกระบวนการของ Bash :
diff foo <(ssh myServer 'cat foo')
หรือถ้าทั้งคู่อยู่บนเซิร์ฟเวอร์ระยะไกล:
diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')
ในที่สุดฉันก็พบทางออกที่ดี: vimdiff
vimdiff /path/to/file scp://remotehost//path/to/file
ขอบคุณที่http://linux.spiney.org/remote_diff_with_vim_and_ssh เห็นhttp://www.vim.org/scripts/script.php?script_id=1075
//
หลังจากที่remotehost
สำคัญ เครื่องหมายทับเดี่ยวจะไม่ทำงาน
vimdiff /path/to/file scp://username@remotehost//path/to/file
นี่คือสูตรบรรทัดคำสั่งอื่นที่รวดเร็วและสกปรก ต่างจากคำตอบที่เลือกมันใช้งานได้ภายใน makefiles:
ssh [login]@[host] "cat [remote file]" | diff - "[local file]"
ใช้ scp เพื่อนำไฟล์ไปยังเครื่องทั่วไปและแตกต่างกันที่นั่นหรือไม่
หรือถ้าคุณเพียงต้องการที่จะทราบว่าไฟล์ที่มีความแตกต่างกันหรือไม่สับพวกเขาด้วย md5sum ในแต่ละเครื่อง
คุณสามารถดูบางอย่างเช่นSSHFSได้ แต่ฉันไม่รู้ว่าอัลกอริทึมอย่าง diff แตกต่างกันอย่างไร
rsync --dry-run
เป็นวิธีที่ง่ายเพื่อดูว่าไฟล์ที่แตกต่างกันหรือไม่นั้น
คุณสามารถใช้rsync
ในโหมดแห้งเป็นเวลาสั้น ๆ ข้อเสนอแนะในคำตอบอื่น มันแสดงรายการไฟล์ใด ๆ ที่แตกต่างกัน
สำหรับสิ่งนั้นให้ใช้rvnc
ตัวเลือก ( r
= recursive, v
= verbose, n
= dry-run, c
= checksum) ด้วยrsync
in pull mode ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]
) ตัวอย่างคือ:
rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .
โปรดจำไว้ว่านี่ไม่มีข้อมูลว่าไฟล์ภายในเครื่องหรือไฟล์ระยะไกลนั้นใหม่กว่า เพียงแค่ถ้าพวกเขาแตกต่างกัน
บนเครื่องโลคอลของคุณให้ทำสำเนาของไดเร็กตอรี่ที่คุณต้องการกระจายซ้ำ ตัวอย่างเช่น
cp -R dir replica
ใช้ rsync เพื่อทำซ้ำไดเรกทอรีระยะไกลบนสำเนาโลคัล:
rsync remote:/path/to/dir replica
ใช้ diff เพื่อค้นหาความแตกต่างระหว่างโลคัลไดเร็กทอรีและเรพลิกาแบบโลคัลของรีโมตหนึ่ง:
diff dir replica
หากคุณมี sshfs และจำเป็นต้องกระจายไดเรกทอรี:
mkdir remote_path
sshfs user@host:/path/ remote_path
diff -r path remote_path
นี่คือวิธีที่ฉันทำ
ฉันใช้ SFTP ไปยังเซิร์ฟเวอร์ระยะไกลและป้อนชื่อผู้ใช้ / pwd ของฉันเมื่อได้รับแจ้ง จากนั้นฉันใช้ dir ที่สร้างขึ้นใน. gvfs dir ในโฮมไดเร็กตอรี่ของฉันในคำสั่ง diff
diff -r - สรุป / home / user dir / .gvfs / SFTP \ on \ freenas.local / พา ธ ไปยัง dir / dir1 / พา ธ ไปยัง local dir / dir2
นี่คือสคริปต์ที่สามารถช่วยในการกระจายโฟลเดอร์ท้องถิ่นและโฟลเดอร์ระยะไกล:
#!/bin/bash
LOCALFOLDER=/var/www/tee
REMOTEFOLDER=$(ssh root@111.111.111.1 'ls -lA /hfs/tee'| grep -E '^total' | cut -d " " -f 2 > remotessh.txt)
COMMAND=$(ls -lA $LOCALFOLDER | grep -E '^total' | cut -d " " -f 2 > localssh.txt)
REM=$(cat remotessh.txt)
LOCAL=$(cat localssh.txt)
echo $LOCAL
echo $REM
if [ $REM -eq $LOCAL ]
then
echo Directories are the same
else
echo Directories are differnt
fi
#diff localssh.txt remotessh.txt | grep -E '^total' | cut -d " " -f 2
http://myfedora.co.za/2012/04/diff-two-remote-file-systems/
diff <(/ usr / bin / ssh user1@192.168.122.1 'ls / opt / lib /') <(/ usr / bin / ssh user2@192.168.122.1 'ls / tmp /') grep -i ">" | sed 's /> // g'
ใช้sshfsติดตั้งข้าม ssh มันจะไม่เร็วขนาดนั้นทั้งหมด แต่คุณสามารถใช้ชุดเครื่องมือแบบเต็มซึ่งคาดว่าทุกอย่างจะอยู่ในระบบไฟล์ภายในเครื่อง อีกทางเลือกหนึ่งคือ NFS เหนืออุโมงค์ที่ทำด้วย "ssh -w" (หรือการสื่อสารอื่น ๆ ที่ ssh ไม่ได้มีข้อ จำกัด )
คุณยังสามารถลองใช้แนวทางทั่วไปโดยสร้างฟังก์ชัน bash ซึ่งอาจเป็นใน ~ / .bashrc ของคุณ:
myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }
จากนั้นเรียกใช้ด้วยโครงสร้างเช่น:
myrdiff vm20-x86-64 /etc/gdm/Init/Default
ด้วยการเรียกใช้ diff กับ -s สิ่งนี้จะรายงานว่าไฟล์เหมือนกันหรือไม่
ไชโย! จิม
rsync -ani --delete / root@remotehost:/
แต่คำตอบทั้งหมดให้รายละเอียดมากขึ้น