ตัวเลือกทางเลือกเพื่อ rm -f


10

ฉันต้องการเรียกใช้บรรทัดคำสั่ง:

cd ~/www/tmp/; rm -P 2*

แต่ฉันได้รับข้อผิดพลาดหากไม่มีไฟล์ที่ขึ้นต้นด้วย 2

คุณคิดว่าฉันต้องการใช้-fอย่างไรก็ตาม:

-f      Attempt to remove the files without prompting for confirmation, regardless of the file's permissions.  If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.

และฉันทำดูแลเกี่ยวกับแฟ้ม permissions- ถ้ามีบางสิ่งบางอย่างที่แปลกที่เกิดขึ้นผมต้องการยกเลิกคำสั่ง ฉันต้องการระงับข้อผิดพลาด 'ไม่มีอยู่' เท่านั้น

ฉันได้ดูคำถามอื่น ๆ ด้วย 'ข้อผิดพลาด rm' และพบว่าทั้งสองนี้มีความเกี่ยวข้อง (ดูเหมือน):

ลบไฟล์และไดเรกทอรีด้วยชื่อ ไม่พบไฟล์หรือโฟลเดอร์

แต่ฉันไม่เข้าใจทุกสิ่งที่เกิดขึ้นในคำตอบของคำถามนี้และไม่รู้ว่าฉันต้องการมันหรือไม่?

touchสับข้อเสนอแนะในคำถามนี้:

rm ไม่ได้รายงานเมื่อไฟล์หายไปหรือไม่

ดูเหมือนว่าจะใช้การได้ดีเพราะฉันไม่คิดว่าฉันจะนึกถึงประสิทธิภาพการทำงาน (แต่คุณจะใช้การตีประเภทใด - เช่น: นี่เป็นเทคนิคที่ปรับขนาดได้อย่างสมเหตุสมผลหรือฉันเพิ่งเรียนรู้นิสัยที่แย่มาก)

ฉันไม่แน่ใจว่าฉันจะทำอย่างไรif-thenในบรรทัดคำสั่ง

มีตัวเลือกอื่น ๆ สำหรับการล้างข้อมูลบรรทัดคำสั่งอย่างง่าย cut-n-paste หรือไม่?

จะfind -deleteทำงานได้ดีขึ้นสำหรับกรณีของฉัน? ถ้าเป็นเช่นนั้นทำไม


ข้อผิดพลาดในคำถาม:

rm: 2*: No such file or directory

1
ข้อผิดพลาดมาจากเชลล์ของคุณไม่ใช่ rmดังนั้นคุณต้องบอกว่ามันคืออะไร
Michael Homer

คุณใช้zshเป็นเชลล์เชิงโต้ตอบหรือไม่? คุณได้รับNo matches foundข้อผิดพลาดหรือไม่?
Kusalananda

2
@MichaelHomer ไม่ข้อผิดพลาดมาจาก rm เชลล์ส่งต่อสตริง2*ไปที่ rm แทนที่จะขยายไปยังรายการไฟล์ ดูข้อผิดพลาดในคำถาม: มันบอกว่า rm กำลังบ่นไม่ใช่ sh / bas / zsh / ...
doneal24

คำตอบ:


13

หากต้องการโทรrm -Pหาไฟล์ปกติที่มีอยู่ซึ่งมีชื่อตรงกับรูปแบบในไดเรกทอรี (แต่ไม่ใช่ด้านล่าง):

find directory -maxdepth 1 -type f -name 'pattern' -exec rm -P {} +

เช่น,

find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +

เพื่อให้ตรงกับเพียงไดเรกทอรีที่ไม่ใช้ในสถานที่ของ! -type d -type fความแตกต่างคือ! -type dจะเป็นจริงสำหรับช่วงกว้างของประเภทไฟล์ (ลิงก์สัญลักษณ์, ชื่อไปป์, ซ็อกเก็ต ฯลฯ )

เนื่องจากคุณต้องการให้ระบบถามเงื่อนไขบางประการเกี่ยวกับไฟล์ที่พบคุณจึงไม่ควรใช้-deleteแทนที่จะ-exec rmเป็นเช่นrm -fนั้น

ลบ-maxdepth 1เพื่อให้findดูในไดเรกทอรีย่อยซ้ำ


3
แม้ว่า! -type dอาจจะใกล้เคียงกับที่rm 2*ฉันคิดว่า?
muru

ดังนั้นฉันต้องเพิ่ม -P เพื่อรับฟังก์ชั่นนั้น:find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
3082

@ user3082 ใช่ฉันลืมว่าคุณต้องการใช้-Pด้วย
Kusalananda

ขอบคุณ @muru ฉันต้องการจริง ๆ-type fแต่ไม่รู้ว่าจะrmทำอย่างไรเช่นนั้น - ดังนั้นข้อเสนอแนะของ @ Kusalanada จึงเป็นเรื่องที่ต้องทำและความแตกต่าง / คำอธิบายที่ยอดเยี่ยมสำหรับการเรียนรู้
user3082

@ user3082 คุณอาจต้องใช้การขยายแบบวงกลมของเชลล์ (เช่นrm 2*(.)ใน zsh)
muru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.