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