ลบไฟล์โดยไม่ถาม


89

ฉันจะลบไฟล์โดยไม่ถามผู้ใช้ว่าเขาตกลงที่จะลบไฟล์ได้อย่างไร? ฉันกำลังเขียนเชลล์สคริปต์และใช้ฟังก์ชั่น rm แต่มันถามว่า "ลบไฟล์ปกติ?" และฉันไม่ต้องการสิ่งนี้จริงๆ ขอขอบคุณ.


5
rm -f, yes | rmและอื่น ๆ แต่นี่เป็น SU

4
rmไม่แสดง "ลบไฟล์ปกติ" พรอมต์ตามค่าเริ่มต้น คุณต้องให้มันเป็นนามแฝงrm -iหรือกำหนดเป็นฟังก์ชั่น ฉันประหลาดใจที่นามแฝงปรากฏอยู่ในสคริปต์ของคุณ คุณกำลังเรียกใช้งานสคริปต์ ( ./foo.sh) หรือหามัน ( . foo.shหรือsource foo.sh)?
Keith Thompson

คำตอบ:


102

คุณอาจใช้rmนามแฝงrm -iเพื่อลอง:

/bin/rm -f file.log

aliasหากต้องการดูนามแฝงของคุณคุณสามารถเรียกใช้


7
หรือใช้command rm ...หรือ\rm ...ข้ามนามแฝง / ฟังก์ชั่น
glenn jackman

6
เป็นที่ถกเถียงกันอยู่ว่าการใช้rmนามแฝงrm -iเป็นความคิดที่ไม่ดี rmคำสั่งโดยค่าเริ่มต้นอย่างเงียบ ๆ เอาไฟล์ชื่อ โดยการใช้นามแฝงเป็นrm -iคุณสามารถเข้าสู่นิสัยที่ไม่ได้ตรวจสอบอย่างรอบคอบก่อนที่จะกด Enter ขึ้นอยู่กับพรอมต์แบบโต้ตอบเพื่อช่วยคุณ จากนั้นคุณพิมพ์rm some-important-fileในสภาพแวดล้อมที่ไม่มีนามแฝง
Keith Thompson

@ Keith นั่นเป็นความจริงฉันเพียงนามแฝงส่วนตัว rm to rm -v
chown

1
หาก "rm" เป็นฟังก์ชั่น (แทนที่จะเป็นนามแฝง) คำตอบนี้ควรใช้ได้ และunsetคำสั่งbash อาจน่าสนใจ
Xen2050

56

การตั้งค่าสถานะบังคับเอาพร้อมท์ทั้งหมด

rm -f {file}


2
นี่คือสิ่งที่ฉันกำลังมองหาไม่ใช่คำตอบที่ยอมรับได้
gsamaras

29

ขอพลังจงอยู่กับท่าน - rm -f


5
ฉันได้ตอบโต้คำตอบของ lynks แล้วและนี่เป็นสิ่งเดียวกัน เพียงแค่ถอนรากถอนโคนสำหรับอารมณ์ขัน
rain_

ฉันโหวตทั้งความคิดเห็นและคำตอบเพียงเพราะมีคนพบอารมณ์ขันใน SO ...
Mac

5

ภายในเชลล์สคริปต์คุณต้องการใช้rm -f <filename>แต่คุณมีตัวเลือกในการกำจัด-iตัวเลือกโดยปริยายสำหรับสภาพแวดล้อมของคุณโดยการป้อนunalias rmในเชลล์ (หรือโปรไฟล์)


5

yesโปรแกรมตอบซ้ำ ๆ ใช่แจ้งใด ๆ เพื่อให้คุณสามารถวางลงในrmโปรแกรมการโต้ตอบเพื่อให้ได้ผลตามที่ต้องการด้วย

yes | rm <filename>

ในทางกลับกันถ้าคุณไม่ต้องการทำสิ่งที่โต้ตอบคุณสามารถทำได้

yes n | <something interactive>

และนั่นจะทำซ้ำ 'n' บนอินพุตสตรีม (ตอบคำถามไม่ได้)


yes nตัวเลือกไม่ทำงานสำหรับฉัน ในขณะที่ฉันใช้yes n | rm file.txtมันจะลบไฟล์แม้ว่าไฟล์นั้นจะได้รับการปกป้อง
iammilind

5

หากคุณมีสิทธิ์ที่จำเป็นในการลบไฟล์และคุณไม่ต้องการให้พรอมต์ให้ทำดังต่อไปนี้ (-f = force):

rm -f file

หากคุณไม่มีสิทธิ์ใช้งานไฟล์คุณจะต้องใช้:

sudo rm -f file

1
"ลบไฟล์ปกติหรือไม่" พรอมต์บ่งบอกว่าไม่ใช่ปัญหาสิทธิ์
Keith Thompson

4
\rm file

แบ็กสแลช\ข้ามนามแฝง


1
"\" เป็นแบ็กสแลชคุณหมายถึงอะไร
Cand3r

ใช่การใช้ rm โดยไม่มีนามแฝงทำให้คำนำหน้ายืนยันการสนทนาที่ไม่ต้องการด้วย \
teknopaul

1

นอกเหนือจากการใช้-fพารามิเตอร์หรือคุณสามารถใช้findคำสั่งแทนเช่น

find -name file.log -delete

0

ขณะนี้ฉันทำงานที่ระบบโดยที่ bash shell รับนิยามของคำสั่ง rm เป็นฟังก์ชันในหนึ่งในไฟล์คอนฟิกูเรชันโกลบอล:

 rm  () { /bin/rm -i ${1+"$@"}; }

ดังนั้นไม่มีคำตอบข้างต้นเกี่ยวกับนามแฝงที่ใช้งานได้ เพื่อตอบโต้พฤติกรรมที่น่ารำคาญฉันไม่ได้ตั้งค่าฟังก์ชัน rm ในไฟล์. bashrc ของฉัน

 unset -f rm

ฉันมีปัญหาที่คล้ายกันแล้วที่เปิด อย่างไรก็ตามฉันไม่พบคำตอบใด ๆ ที่กล่าวถึงความเป็นไปได้ที่rmซ่อนอยู่โดยฟังก์ชันเชลล์ ดังนั้นฉันจึงเพิ่มคำตอบที่นี่ด้วยความหวังว่ามันจะเป็นประโยชน์สำหรับใครบางคนที่ประสบปัญหาประเภทเดียวกัน

การพิมพ์/bin/rmหรือrm -fตลอดเวลาไม่สะดวกและอาจมีผลกระทบที่ไม่ดี (ในกรณีของrm -f)


นั่นอาจแก้ไขปัญหาของคุณได้ แต่ไม่ตอบคำถาม
suspectus

คำตอบที่เลือกไว้จะไม่/bin/rmทำงานหรือไม่ ถ้าฉันมีฟังก์ชั่นในทุบตีและไฟล์ปฏิบัติการที่มีชื่อเดียวกันในไดเรกทอรีปัจจุบันเพียงแค่เพิ่ม./ด้านหน้าชื่อจะเรียกไฟล์ - ไม่ใช่ฟังก์ชั่น PS - ฉันเพิ่มความคิดเห็นในคำตอบที่เลือกเกี่ยวกับฟังก์ชั่น &unset
Xen2050

ใช่/bin/rmแล้ว การทำสิ่งunsetที่จำเป็นในการพิมพ์เส้นทางแบบเต็ม
daw

0

หากคุณใช้rmนามแฝงrm -iแล้วให้ใช้unalias rm;

อย่าใช้rm -fโดยตรงเว้นแต่คุณต้องการลบไฟล์ที่มีการป้องกันการเขียนจำนวนมากจริงๆ -fต้องมีเหตุผลที่ดีมากที่จะใช้

อย่างไรก็ตามหากคุณมีไฟล์ที่มีการป้องกันการเขียนจำนวนมากคุณอาจต้องการrsync -r --delete empty/ removed_dir/ความเร็วที่เร็วขึ้น


0

วิธีที่ชื่นชอบการทำเช่นนี้เป็นเพียงการใช้คำสั่งในทุบตีเพียงวิธีการเดียวกับที่คุณใช้command sudoสิ่งนี้จะเรียกใช้คำสั่งของคุณโดยไม่มีนามแฝงเช่นเดียวกับที่เรียกใช้โดย/bin/rm(อาจrmเป็นนามแฝงเป็นrm -i)

ตัวอย่าง:

command rm -f /tmp/file.txt

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