ฉันพยายามวิ่ง
locate *.orig | xargs rm
แต่มันบอกว่า No such file or directory
ฉันเคยเห็นวิธีที่จะทำfindแต่การค้นหาคืนค่าเส้นทางแบบเต็มไปยังวัตถุดังนั้นมันควรจะเป็นไปได้
ฉันพยายามวิ่ง
locate *.orig | xargs rm
แต่มันบอกว่า No such file or directory
ฉันเคยเห็นวิธีที่จะทำfindแต่การค้นหาคืนค่าเส้นทางแบบเต็มไปยังวัตถุดังนั้นมันควรจะเป็นไปได้
คำตอบ:
หากชื่อไฟล์มีช่องว่างที่คุณควรใช้
locate -0 $something | xargs -0 rm
จากlocateหน้าคน :
-0,--nullเฉพาะกิจรายการในการส่งออกโดยใช้อักขระ ASCII NUL แทนการเขียนรายการในบรรทัดที่แยกต่างหากแต่ละ ตัวเลือกนี้ถูกออกแบบมาเพื่อการทำงานร่วมกันกับตัวเลือก --null ของ GNU xargs (1)
หรือ
locate $something | while read f; do rm "$f"; done
นอกจากนี้คุณควรป้องกัน*.origด้วยเครื่องหมายคำพูดเพื่อหลีกเลี่ยงการขยายตัวของเชลล์และส่งผ่านเพื่อหาตำแหน่งที่ไม่ถูกแตะต้อง
| while readเพราะไดเรกทอรีบ้านของฉันเต็มไปด้วยไฟล์ที่มีช่องว่าง
*.origเชลล์จะขยายรูปแบบเป็นพูดfile1.orig file2.orig ...เพื่อที่locateจะไม่เห็นสตริงที่แน่นอน*.origตามที่ควร
tr '\n' '\0'หาเอาท์พุทที่คุณสามารถแล้ว
มันxargsไม่ใช่xarg
คำสั่งlocate *.orig | xargs rmใช้งานได้จริง แต่สิ่งที่เกิดขึ้นคือlocateการค้นหา*.origไฟล์ในถังขยะสามารถrmแยกแยะข้อผิดพลาดNo such file or directoryเมื่อพยายามลบไฟล์ในถังขยะ
ค้นหาไม่ได้ทำ globbing แต่เปลือกทำ เชลล์ขยาย * .orig ไปเป็นสิ่งที่พบในไดเร็กทอรีปัจจุบันซึ่งตรงกับ * .orig
เพียงแค่ใช้
locate .orig
และถ้านั่นทำให้คุณได้สิ่งที่คุณต้องการ
locate .orig | xargs rm
หรือตามที่ระบุไว้ใน enzotib
locate -0 .orig | xargs -0 rm
หากคุณมีช่องว่างในชื่อไฟล์
เคล็ดลับ: บันทึกเส้นทางทั้งหมดในไฟล์ tmp จากนั้นวนรอบมัน:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt