มีคำสั่งอื่น ๆ เช่น scp แต่สำหรับการลบไฟล์และโฟลเดอร์?


14

ฉันกำลังใช้ scp เพื่อคัดลอกข้อมูลไปยังสถานที่ห่างไกล แต่บางครั้ง scp ใช้งานไม่ได้ตามที่คาดไว้ฉันพบว่าบางครั้งสำเนาไม่สมบูรณ์อย่างสมบูรณ์ (อาจเป็นเมื่อฉันเพิ่มไฟล์ใหม่ไปยังโฟลเดอร์ที่ฉันกำลังคัดลอก)

ดังนั้นฉันต้องการลบโฟลเดอร์ระยะไกลก่อนแล้วจึงทำสำเนาเพื่อให้แน่ใจว่าฉันมีสิ่งที่ฉันต้องการ

มีคำสั่งอื่น ๆ เช่น scp (เช่น srm หรือ smv) หรือไม่? หรือมีวิธีลบโฟลเดอร์และไฟล์ระยะไกลหรือไม่?

คำตอบ:


19

sshคำสั่งจะช่วยให้คุณสามารถดำเนินการสวยมากคำสั่งใด ๆ ในพื้นที่ห่างไกลเช่น

ssh yourlogin@remotehost rmdir somedir

โดยที่ในตัวอย่างsomedirนี้สัมพันธ์กับโฮมไดเร็กทอรีของ yourlogin


ขอบคุณสำหรับสิ่งนั้น ปัญหาเดียวที่ฉันมีกับวิธีการคือทุกครั้งที่คุณเรียกว่าคุณต้อง "เข้าสู่ระบบ" อีกครั้ง :( เนื่องจากเป้าหมายของฉันถูกฝังอยู่ฉันไม่สามารถใช้คีย์ ssh ได้เพราะมันเขียนทับได้หมดดังนั้นฉันจึงพยายาม ทำสิ่งนี้ในคำสั่งเดียว rsync ดูมีแนวโน้ม แต่ +1 ตั้งแต่นี้จะตอบคำถาม :))
code_fodder

5
@code_fodder คุณจะต้องลงชื่อเข้าใช้ด้วย rsync เช่นกัน ในความเป็นจริงคุณจะต้องเข้าสู่ระบบอีกครั้งด้วยวิธีการทั้งหมด อันที่จริงแล้วด้วย ssh คุณสามารถดำเนินการหลาย ๆ คำสั่งได้ในครั้งเดียว: ssh you@host bash -c "command1;command2;command3; commandN".
terdon

@terdon นี่เป็นจุดที่ดีและใช้งานได้ดีขอบคุณ nicley :)
code_fodder

4

Rsync จะคัดลอกพา ธ / ทรีทั้งหมดและตรวจสอบไฟล์ที่มีอยู่แล้วที่ปลายทางและไม่ต้องคัดลอกไฟล์หากไม่มีการเปลี่ยนแปลง หากคุณใช้ตัวเลือก - ลบมันจะลบไฟล์ใด ๆ ที่อยู่ในปลายทางที่ไม่ได้อยู่ที่ต้นทางอีกต่อไป มันใช้งานได้มากกว่า ssh


ฉันยุ่งกับ rsync เพราะมีคนพูดถึงเรื่องนี้ในบทความอื่นเกี่ยวกับ SCP ฉันติดตั้ง rsync ไว้ในพีซีของฉัน แต่ไม่ได้ติดตั้งไว้บนพีซีระยะไกล (หน่วยฝังตัว) ผมใช้คำสั่งแต่ก็ล้มเหลวหลังจากที่ฉันป้อนรหัสผ่านว่าrsync -avz -e shh root@location:/path/to/dest /path/from/host sh: rsync: not foundนั่นหมายความว่าต้องมี rsync บนพีซีระยะไกลหรือไม่ ขอบคุณ!
code_fodder

1
@code_fodder ใช่มันต้องการโปรแกรมที่ทำงานบนระบบรีโมตเพื่อบอกว่าต้องทำอะไร มันไม่ใช่โปรแกรมคัดลอกที่ตรง
ลุคแคนาดา

@CanadianLuke ... เจ้ากรรม :(
code_fodder

@code_fodder เพียงแค่ติดตั้ง! มีประโยชน์มากกว่านี้แล้ว
Canadian Luke

ขึ้นอยู่กับวิธีการฝังตัว rsync อาจหรืออาจจะไม่สามารถใช้ได้กับทุกระดับของง่าย ... แม้ว่ามันจะเป็นความไม่ลงรอยกันที่พบบ่อยดังนั้นฉันกล่าวขึ้นอยู่กับวิธีการฝังตัว หมายเหตุ: Rsync ไม่จำเป็นต้องทำงานอยู่ตลอดเวลา แต่จะต้องมีการเรียกใช้ตามความต้องการ
jerm

3

หากเซิร์ฟเวอร์ SSH ระยะไกลของคุณรองรับระบบย่อย SFTP (ส่วนใหญ่ทำยกเว้นว่ามันถูกปิดใช้งานอย่างชัดเจน) คุณสามารถใช้sftpเชลล์ (หรือไคลเอนต์ SFTPอื่น ๆ) เพื่อจัดการไฟล์และไดเรกทอรีบนเซิร์ฟเวอร์ระยะไกล

น่าเสียดายที่สิ่งหนึ่งที่sftpเชลล์พื้นฐานไม่สามารถจัดการได้คือการลบไดเรกทอรีแบบเรียกซ้ำ ในการลบไดเรกทอรีคุณต้องลบเนื้อหาทั้งหมดก่อน โดยทั่วไปแล้วลูกค้าอื่น ๆ (โดยเฉพาะกราฟิก) มักจะสนับสนุนลูกค้า

(คุณไม่ได้พูดถึงสิ่งที่ระบบปฏิบัติการท้องถิ่นของคุณเป็น แต่ถ้าเป็น Linux คุณสามารถใช้ตัวจัดการไฟล์ดั้งเดิมของคุณเป็นไคลเอนต์ GUI SFTPโดยชี้ไปที่ URL เช่น sftp: // user @ host / path / สำหรับ Windows, WinSCPเป็นลูกค้าที่ดีและFileZillaเป็นโซลูชันข้ามแพลตฟอร์มที่ดี)


1

หากต้องการล้างไดเรกทอรีระยะไกล (/ ท้องถิ่น) ให้ใช้ rsync ดังนี้:

rsync -r --delete-excluded --exclude=* / server:/tmp/empty_this_dir/

ระวัง - มันลบทุกอย่างด้านล่างปลายทางที่ระบุ!


ฉันเคยลองมาแล้ว แต่มันกลับข้อผิดพลาดและไม่ลบไดเรกทอรีระยะไกล การร้องขอ exec ล้มเหลวในแชนเนล 0 rsync: การเชื่อมต่อปิดโดยไม่คาดคิด (ได้รับ 0 ไบต์แล้ว) [ผู้ส่ง] ข้อผิดพลาด rsync: ข้อผิดพลาดที่ไม่ได้อธิบาย (รหัส 255) ที่ io.c (235) [ผู้ส่ง = 3.1.2]
xarlymg89

ดูเหมือนว่ามีปัญหาในการเริ่ม rsync ทางด้านระยะไกลหรือแม้กระทั่งการเชื่อมต่อผ่าน ssh คุณสามารถลองssh server rsync --versionหรือssh -v server rsync --versionหาเหตุผล
bro

ขอบคุณที่ตอบคำถาม แต่ฉันพบวิธีแก้ปัญหาไม่สวยหรู แต่มีผลลัพธ์ที่คล้ายกัน จะลองอีกครั้งเพราะฉันเชื่อว่าฉันจะต้องเผชิญหน้าอีกครั้ง
xarlymg89

0

อีกวิธีหนึ่งคือการติดตั้งรีโมตไดเร็กทอรีในโลคัลไดเร็กทอรีจากนั้นลบออกด้วยrm -r /path_to_directory_to_removeและในที่สุดการขยายไดเร็กทอรีจะเป็นการหลอกลวง

คำตอบต้นฉบับที่นี่: /programming//a/24650511/973919

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.