ฉันพยายามวิ่ง
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