ไฟล์ scp และลบไฟล์ในไดเรกทอรีระยะไกล [ปิด]


18

ฉันเป็นยูนิกซ์ noob ดังนั้นโปรดอดใจรอ :-)

ฉันมีสคริปต์ที่ scps ไฟล์จำนวนมากไปยังเซิร์ฟเวอร์อื่น

สมมติว่าพวกเขาเป็น z1.foo, z2.foo เป็นต้นสิ่งที่ฉันต้องการทำคือการ scp ไฟล์และลบไฟล์ที่เก่ากว่า 5 วันในเซิร์ฟเวอร์ปลายทาง

ฉันจะลบไฟล์ออกจากปลายทางได้อย่างปลอดภัยได้อย่างไร

ขอบคุณ


"เขียนทับไฟล์ที่ปลายทาง" หรือไม่ หากคุณ scp ไฟล์ที่มีอยู่แล้วใน dir ระยะไกลที่พวกเขาจะถูกเขียนทับโดยอัตโนมัติ
Aki

เป็นความคิดที่ดีที่จะลบไฟล์ด้วยเชลล์สคริปต์ในเครื่องซึ่งหมายความว่าคุณเป็นไฟล์ SCPing ทุกครั้งที่คุณต้องการ แต่มีเชลล์สคริปต์ที่ทำงานทุกวันเพื่อลบไฟล์ภายใต้โฟลเดอร์ที่คุณเก็บ files.command จะเป็นดังนี้:find /path/to/files* -mtime +5 -exec rm {} \;
Zareh Kasparian

คำตอบ:


21

ในการลบไฟล์แบบไม่โต้ตอบ:

ssh hostname "rm -f z100.foo z200.foo"

1
ชื่อโฮสต์คืออะไร มันคือservername@ipaddress:path/to/dir/อะไร
HattrickNZ

1
ชื่อโฮสต์เป็นเพียงuser:password@ipaddressหรือuser:password@dnsnameหรือคุณสามารถละเว้นรหัสผ่านหากไม่ต้องการ ฉันแค่ลองกับroot@somednsnameมันและมันก็ใช้ได้ดี path/to/dirส่วนฉันใส่ในคำสั่ง RM ที่เป็นเส้นทางที่แน่นอนเพื่อให้แน่ใจว่ามันเป็นเรื่องที่ถูกต้อง
AsGoodAsItGets

6

คุณสามารถบรรลุผลงานทั้งในคำสั่งเดียวกันโดยใช้ธง--deletersync

> ls -1 localdir/
a.foo
b.foo

> ssh remote-host "ls -1 remotedir/"
c.foo

> rsync -a --delete localdir/ remote-host:remotedir/

> ssh remote-host "ls -1 remotedir/"
a.foo
b.foo

--deleteตัวเลือกลบไฟล์จากไดเรกทอรีปลายทางที่ไม่อยู่กับแหล่งที่มา มีตัวเลือกบางอย่างเกี่ยวกับเวลาที่ไฟล์ถูกลบและวิธีจัดการกับไฟล์ที่ถูกแยก

> man rysnc
...
--delete                delete extraneous files from dest dirs
--delete-before         receiver deletes before transfer (default)
--delete-during         receiver deletes during xfer, not before
--delete-after          receiver deletes after transfer, not before
--delete-excluded       also delete excluded files from dest dirs

หน้าคนยังมีคำเตือนนี้:

ตัวเลือกนี้อาจเป็นอันตรายหากใช้ไม่ถูกต้อง! เป็นความคิดที่ดีมากที่จะเรียกใช้ครั้งแรกโดยใช้--dry-run option( -n) เพื่อดูว่าไฟล์ใดที่จะถูกลบเพื่อให้แน่ใจว่าไฟล์สำคัญไม่อยู่ในรายการ


2

หากคุณต้องการตั้งชื่อผู้ใช้และหมายเลขพอร์ตคุณสามารถทำสิ่งต่อไปนี้:

ssh root@203.0.113.123 -p22 "rm -rf /home/amzad/test.php"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.