ฉันเขียนสคริปต์ที่ลบทั้งหมดยกเว้นไฟล์สองไฟล์สุดท้ายในโฟลเดอร์:
#!/bin/bash
ls -1 --quoting-style=shell-always /path/to/some/folder \
| head -n -2 \
| xargs printf -- "'/path/to/some/folder/%s'\n" \
| xargs sudo rm -rf
สคริปต์นี้จะถูกเรียกใช้เป็นงาน cron ทุกวัน
เหตุผลมีดังนี้:
รับรายการไฟล์ทั้งหมดโดยใช้
ls -1(เพื่อให้ได้หนึ่งไฟล์ต่อบรรทัด);นำสองคนสุดท้ายจากรายการใช้
head -n -2;ตั้งแต่
lsพิมพ์พา ธ ที่สัมพันธ์กันให้ใช้xargs printfสิ่งต่าง ๆ เพื่อผนวกเส้นทางโฟลเดอร์และทำให้เป็นพา ธ สัมบูรณ์ส่งพวกเขาไปใช้
sudo rm -rfxargs
ทุกคนสามารถเข้าถึงโฟลเดอร์นี้เพื่อให้ทุกคนสามารถสร้างและลบไฟล์ใด ๆ ในโฟลเดอร์นี้
ปัญหาคือ: sudo rm -rfน่ากลัว xargs sudo rm -rfน่ากลัวอย่างไม่น่าเชื่อ
ฉันต้องการให้แน่ใจว่าไม่มีใครสามารถสร้างความเสียหายให้กับโฟลเดอร์ / ระบบอื่น ๆ โดยการสร้างไฟล์ที่ฉลาดที่จะลบ (ไม่ว่าจะโดยบังเอิญหรือโดยเจตนา) ฉันไม่รู้สิ่งที่ฉลาดชอบ:
file with / spaces.txt
ซึ่งอาจส่งผลให้น่ากลัวสุดsudo rm -rf /ๆ
แก้ไข:ความผิดพลาดของฉันชื่อไฟล์ไม่สามารถมีได้/ดังนั้นปัญหาเฉพาะนี้จะไม่เกิดขึ้น แต่คำถามเกี่ยวกับความเสี่ยงอื่น ๆ ที่ยังคงมีอยู่หรือไม่
นี่คือเหตุผลที่ฉันกำลังใช้--quoting-style=shell-alwaysงานสิ่งนี้ควรป้องกันไม่ให้เล่ห์เหลี่ยมกับไฟล์ที่มีช่องว่าง แต่ตอนนี้ฉันสงสัยว่าบางคนอาจฉลาดกว่าเดิมด้วยช่องว่างและเครื่องหมายคำพูดในชื่อไฟล์บางที
สคริปต์ของฉันปลอดภัยหรือไม่?
หมายเหตุ: ฉันต้องการsudoเพราะฉัน acessing โฟลเดอร์จากระยะไกล (จากไดรฟ์เครือข่ายที่แมปใช้mount) และฉันไม่สามารถใช้งานได้หากไม่มี sudo
/ในชื่อฉันพยายามที่จะทำให้มันกลับมาที่นี่อีกครั้งหรือไม่
lsผลลัพธ์นี่เป็นคำสั่งที่เขียนไม่ดีแม้ว่าจะมีการอ้างอิง lsฉันใช้สถานที่สำหรับการเรียงลำดับฉันคิดว่าฉันไม่เห็นว่าจุดประสงค์headในการลบ 2 รายการสุดท้าย (เว้นแต่คุณกำลังพยายามกำจัด.และ..ไม่อนุญาตให้ใช้ iirc ใดเป็นอาร์กิวเมนต์ในการrmต่อไปใช้เพียงfind /path/to/folder -type f deleteและ ไม่sudoถ้าคุณเรียกใช้จาก cron - cron อยู่ในระดับรากแล้ว
printf -- '%s\0' /path/to/some/folder/* | head -zn -2 | xargs -0 rm?