“ find: อาร์กิวเมนต์ที่หายไปถึง `-exec '” เมื่อใช้“ -exec rm -f {} \”


12

ฉันรันคำสั่งนี้:

~/shell_temp$ find . -type f -name "IMAG1806.jpg" -exec rm -f {}\

ฉันได้ผลลัพธ์ด้านล่าง:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

คำสั่งที่แน่นอนสำหรับการค้นหาไฟล์ใด ๆ จากไดเรกทอรีปัจจุบันและลบด้วย-exec?


1
คุณทำไม่ได้rm "IMAG1806.jpg"เหรอ มันอยู่ในไดเรกทอรีเดียวกันคุณจึงรู้ว่ามันเรียกอะไร
TheWanderer

@ Zacharee1 - จะถือว่า OP กำลังทำ "dry run" ฉันจะพิจารณาใช้ -i กับ rm ในกรณีที่การค้นหาของคุณ "พบ" ไฟล์เพิ่มเติมจากนั้นตั้งใจหรืออย่างน้อยทำงานโดยไม่ต้อง -exec และตรวจสอบรายชื่อไฟล์
Panther

1
@ Zacharee1: คำสั่ง find จะลบไฟล์ทั้งหมดที่ถูกเรียกด้วยชื่อนี้ในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยทั้งหมด (ทุกระดับความลึก)
เดนนิส

3
หรือแทนที่จะใช้-exec rmเพียงแค่ใช้-deleteโดยตรง
Braiam

คำตอบ:


30

คุณพลาด a ;ท้ายที่สุด (และเว้นวรรคระหว่าง{}และ;) คำสั่งที่ถูกต้องคือ:

find . -type f -name "IMAG1806.jpg" -exec rm -f {} \;

;บ่งบอกถึงการสิ้นสุดของกริยาของ-execfind

นอกจากนี้โปรดทราบว่าเราได้ใช้\;ie \อยู่ข้างหน้า;เพื่อหลีกเลี่ยงการตีความ;โดยเชลล์มิฉะนั้นเชลล์จะถือว่า;สิ้นสุดfindคำสั่งทั้งหมดและfindจะโยนข้อผิดพลาดเดียวกัน นอกจากนี้คุณยังสามารถใช้แทน';'\;

คุณกำลังใช้งาน\ในตอนท้ายสิ่งนี้บ่งชี้ว่าเชลล์ของคุณจะยังคงรับข้อมูลผ่านPS2(ระบุโดย>) คุณพิมพ์IMAG1806.jpgอีกครั้งดังนั้นคำสั่งทั้งหมดจะกลายเป็น:

find . -type f -name "IMAG1806.jpg" -exec rm -f {}IMAG1806.jpg

ที่คุณสามารถดูนี้ไม่ได้เป็นคำสั่งที่ถูกต้องทั้งหมดที่มีIMAG1806.jpgในตอนท้ายปิดไม่-execกริยาและไม่ต้องเว้นวรรคระหว่างและ{}\;


1
"คุณพลาด;ที่สิ้นสุด" ขอบคุณสำหรับสิ่งนี้ใช้เวลา 10 นาทีในการแก้ปัญหาก่อนที่ฉันจะรู้ว่าฉันพิมพ์โดยไม่ได้ตั้งใจ:แทน;บนหน้าจอ HD สมัยใหม่เหล่านี้มันง่ายที่จะพลาด ...
user5359531

7

คุณทำได้ง่ายๆ

find . -type f -name 'IMAGE1806.jpg' -delete

จากหน้าคน:

Delete files; true if removal succeeded.  If the removal failed,
an  error message is issued.  If -delete fails, find's exit sta‐
tus will be nonzero (when it eventually exits).  Use of  -delete
automatically turns on the -depth option.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.