ฉันจะทำให้ 'rm' ย้ายไฟล์ไปที่ถังขยะได้อย่างไร


62

rm DirectoryNameผมใช้ขั้วในชีวิตประจำวันผมมักจะใช้ บางครั้งฉันก็บ้าrm *ไปแล้ว อย่างที่คุณสามารถจินตนาการได้บางครั้ง shenanigans เหล่านี้กลับมาและโจมตีฉันต่อหน้า ไม่มีใครรู้ว่าฉันสร้างแผนที่เพื่อrm whateverย้ายทุกอย่างไปยังถังขยะซึ่งฉันลบด้วยตนเอง


3
คุณสามารถทำได้mv /file/to/delete ~./Trash

6
เป็นการยากที่จะวางล้อการฝึกอบรมลงบนเครื่องมือที่มีความแม่นยำเช่น rm โดยไม่ทำให้สคริปต์อื่นเสียหาย สิ่งที่ต้องการalias rm=/bin/rm -iควรจะได้รับคุณได้อย่างปลอดภัยผ่านการฝึกอบรมจากบ้าของคุณ นอกจากนี้ - ไดเร็กทอรีถังขยะใดที่คุณต้องการให้ rm ใช้? มันน่าเบื่อเพราะ Mac OS X มีไดเรกทอรีถังขยะสำหรับแต่ละเล่มรวมถึงถังขยะระดับผู้ใช้
bmike

1
หากคุณใช้ zsh ตามค่าเริ่มต้นจะแจ้งให้คุณทราบเมื่อคุณทำrm *หรือrm /path/*
Daniel Serodio

1
เพิ่มฉันลงในรายชื่อคนที่คิดว่านี่เป็นคำถามที่อันตรายอย่างยิ่งที่จะตอบ หากคุณทำงานให้ฉันฉันจะพยายามไม่ตบคุณจนกว่าคุณจะสัญญาว่าจะไม่ "บ้าไปหน่อย" ที่ shell prompt และออกคำสั่งเช่น 'rm' ฉันจะตรวจสอบให้แน่ใจอีกครั้งว่าคุณไม่มีสิทธิ์การดูแลระบบ sudo สำหรับเครื่องที่ฉันใช้หรือรับผิดชอบ ก่อนที่ฉันจะพิมพ์ "rm" หรือ "sudo" ฉันจะยืนขึ้นและถามตัวเองว่าฉันมั่นใจ 100% หรือไม่ว่าฉันเข้าใจผลกระทบของสิ่งที่ฉันกำลังจะทำ บางทีคุณแค่ต้องทำ "rm -rf" และทนทุกข์อยู่พักหนึ่ง
Wilfred Smith

ขออภัยล่วงหน้าหากความคิดเห็นของฉันดูโหดร้าย แต่คำถามที่ทำให้ฉันตกใจ
Wilfred Smith

คำตอบ:


79

ความคิดที่ไม่ดี

การใช้rmเพื่อย้ายไฟล์ไปที่ถังขยะเป็นเหมือนวัชพืช เป็นเรื่องปกติและน่ายินดี แต่อาจเป็นสิ่งที่ไม่ดีสำหรับคุณในอนาคต ;)

rmคุณจริงๆต้องควบคุมตัวเองเมื่อใช้


อย่าใช้rm

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

ดังนั้นให้ติดตั้งrmtrashและใช้งานนิสัยแทน:

# install rmtrash, (either from the macports or by the brew.)
$ alias trash="rmtrash"
$ alias   del="rmtrash"       # del / trash are shorter than rmtrash

การแก้ไขนิสัยที่ไม่ดี

สิ่งที่คุณสามารถทำได้เพื่อบังคับตัวเองให้ใช้อีกrmtrashแทนที่จะเป็นนามแฝงไปยังข้อความที่กำหนดเองในของคุณrm.profile

alias rm="echo Use 'del', or the full path i.e. '/bin/rm'"

ดังนั้นเมื่อใดก็ตามที่คุณใช้rmคุณจะได้รับแจ้งให้ใช้อย่างใดอย่างหนึ่งหรือrmtrash /bin/rmโปรดจำไว้ว่านี่เป็นเพียงชั่วคราวหลังจากผ่านไประยะหนึ่งคุณควรลบชื่อแทน


ไม่เคยทำสิ่งนี้:

$ pwd
/
$ cd /tnp; rm -rf *
sh: cd: /tnp: No such file or directory

Pop Quiz: rmคำสั่งจะทำงานในไดเรกทอรีใด :)

Ps: เพิ่งลบการแก้ไขที่ไม่ต้องการในโพสต์นี้สิ่งที่เพิ่มความไร้สาระบางอย่างเกี่ยวกับนามแฝง


14
&&คือเส้นชีวิตของคุณ ;เป็นปีศาจ ป.ล. คำตอบก็คือทุกอย่างในระบบของคุณจะหายไปในตัวอย่างข้างต้น
Jason Salaz

แม้ว่า rm จะไม่ทำการลบที่ปลอดภัย แต่การย้ายไปที่ถังขยะ / เปล่าทำได้ (ในการตั้งค่าของฉัน)
Mike Graf

1
ผู้ใช้ Debian / Ubuntu ติดตั้งtrash-cliแทนเช่น aptitude install trash-cli- ดูgithub.com/andreafrancia/trash-cli
Daniel Sokolowski

@ jm666 ลองดูถังขยะด้วย ( โพสต์บล็อก & แหล่งที่มา ) มันจะขอ Finder สำหรับไฟล์ที่ถูกทิ้ง ยิ่งไปกว่านั้นมันยังสามารถใช้ Objective C filesystem APIs (เร็วกว่า) และ fallback ไปที่ Finder ได้หากสิทธิ์ไม่เพียงพอ brew install trash
parth

rmtrashเก่าจริง ๆ แล้วอัปเดตครั้งล่าสุดเมื่อปี 2003 และมันแสดงให้เห็น มีตัวเลือกน้อยกว่าrmและถ้าคุณพูดrmtrashในโวลุ่มสำรองไฟล์จะย้ายไฟล์เหล่านั้นไปยังโฟลเดอร์ถังขยะของผู้ใช้ในไดรฟ์ระบบซึ่งอาจใช้เวลานานสำหรับไฟล์ขนาดใหญ่ trashตัวเลือกที่แนะนำโดย parth จะดีกว่าการแก้ปัญหาเก็บ-on-เดียวกันปริมาณ แต่ยังขาดหายไปหลายrmตัวเลือก
Warren Young

25

ฉันสามารถคิดวิธีโหลรหัสนี้ แต่เด็ดขาดปฏิเสธพิมพ์ใด ๆ ของพวกเขาในคำตอบ ผมขอแนะนำให้คุณลดนิสัยของคุณได้รับเพียงเล็กน้อยบ้า คุณไม่ควรใช้rmงานเลยถ้าคุณใช้ไม่ถูกวิธี

ปัญหาพื้นฐานที่นี่คือแม้ว่าคุณจะติดตั้งเครือข่ายความปลอดภัยในระบบของคุณเองซึ่งจะช่วยให้คุณรักษานิสัยที่ไม่ดีของคุณและเมื่อคุณอยู่ในเครื่องอื่นในบางวันที่ไม่มีการป้องกันที่กำหนดเองคุณจะ ทำสิ่งที่เลวร้ายอย่างยิ่งยวด

โซลูชันที่เหมาะสมคือการใช้rmตามที่ตั้งใจไว้รวมถึงการเพิ่ม-iอาร์กิวเมนต์ด้วยตนเองทุกครั้งที่คุณสงสัยว่าจะขยายตัวอย่างไรและมีระบบสำรองข้อมูลที่ดีซึ่งคุณสามารถกู้คืนได้ในกรณีที่เกิดข้อผิดพลาดที่ร้ายแรงของผู้ใช้ การพยายามเพิ่ม "ถังขยะ" ลงในคำสั่งที่ในส่วนที่เหลือของจักรวาลไม่ได้ใช้เป็นขั้นตอนครึ่งทางที่เลวร้ายที่สุดของโลกทั้งสอง

อาจใช้ถังขยะหรือไม่ก็ได้ การใช้rmไม่ได้ไปที่ถังขยะ แต่เป็นการลบ

หากคุณต้องการใช้ถังขยะไม่มีอะไรผิดปกติ เพียงแค่ได้รับในนิสัยของการใช้ที่คำสั่งแทนrmtrash rmสิ่งนี้จะช่วยให้สมองของคุณเข้าใจสิ่งที่เกิดขึ้นและไม่นำคุณไปสู่นิสัยที่ไม่ดีที่จะทำให้เกิดความเศร้าโศกในภายหลัง


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

5
@steve คุณพลาดจุดทั้งหมด rmโดยคำนิยามจะลบไฟล์ออกจากดิสก์ ไม่ส่งไปที่ถังขยะ การสอนตัวเองให้ใช้rmเมื่อคุณหมายถึงส่งไปที่ถังขยะทำให้คุณเกิดภัยพิบัติ หากคุณต้องการส่งไปที่ถังขยะใช้rmtrashหรือโปรแกรมที่ออกแบบมาสำหรับงานแล้วคุณจะไม่พบฝันร้ายในภายหลัง ฉันไม่ได้บอกว่าการใช้ถังขยะนั้นผิดปกติ แต่ถ้าคุณต้องการใช้มันอย่าใช้สายกับสิ่งที่ไม่ได้ตั้งใจจะใช้!
Caleb

2
brew install rmtrashและหยุดใช้rm
GabLeRoux

นี่คือคำตอบที่ยอดเยี่ยมเคลียร์บางสิ่งสำหรับฉัน ฉันจะพยายามที่จะฟอร์มนิสัยของการใช้แทนrmtrash rm
Sheharyar

sudo add-apt-repository ppa: nateshmbhat / rm-trash จากนั้นติดตั้ง "rm-trash"
Natesh bhat

3

rmมีวิธีที่จะป้องกันตัวเองจากผลที่น่ากลัวจากการเป็น อย่างไรก็ตามฉันเห็นด้วยกับผู้แสดงความคิดเห็นคนอื่น ๆ ที่นี่: มีน้อยมากที่ดี

อย่าเพิ่งเชื่อว่าการเปลี่ยนคำสั่งจะช่วยคุณได้ ตัวอย่างเช่นคุณจะพบคนออนไลน์ทุกที่แนะนำให้ทำสิ่งนี้:

alias rm="rm -i"

หรือ

function rm()
{
    echo >&2 'rm forbidden; use "/bin/rm"'
}
export -f rm

สิ่งนี้จะไม่ทำงาน ระยะเวลา มีหลายกรณีการใช้งานที่มีห้องนั่งเล่นเล็ก ๆ น้อย ๆ เหล่านี้จะล้มเหลวคุณอย่างน่าสังเวช

วิธีที่แข็งแกร่งเพียงอย่างเดียวที่ฉันใช้ในการช่วยตัวเองให้พ้นจากอันตรายrmคือการตั้งค่ากระบวนการสำรองข้อมูลปกติผ่าน cron เหนือไดเรกทอรีที่ฉันทำงาน Raw UNIX ทำเพื่อคุณเป็นอย่างดีด้วยความเรียบง่ายที่ยอดเยี่ยมใช้findร่วมกับ-mtimeเพื่อตรวจสอบไฟล์ที่ได้รับการปรับปรุงภายในหรือหลังจากเวลาที่กำหนด


+1 สำหรับcronคนเดียว ขอบคุณ :)
bmike

2

ใช้เครื่องมือบรรทัดคำสั่งเช่นrmtrashหรือสคริปต์ทททใช้ appcript เพื่อเรียกเครื่องมือค้นหาเพื่อลบ

หลังจากติดตั้ง rmtras เพื่อพูด / usr / local / bin / rmtrash creat จะสร้างชื่อแทนสำหรับทุบตี

alias rm='rmtrash'

คุณสามารถใช้ \ rm เพื่อโทรหา rm โดยตรงและไม่สนใจ alias


14
หากคุณใช้เครื่องมือเช่นrmtrashโปรดทำด้วยตัวเองชอบและใช้มันโดยใช้ชื่อของตัวเอง ไม่เคยฉายาสิ่งที่ไม่ควรrmไปrmสักวันมันจะกัดคุณ
Caleb

1
rmtrashเข้ากันไม่ได้กับrm(ไม่สนับสนุนพารามิเตอร์บรรทัดคำสั่งเช่นเดียวกัน-r) เพื่อให้นามแฝงจริงๆคือไม่ได้มีประโยชน์ในกรณีใด ๆ
เพอร์รี่

มันเป็นความคิดที่ดีที่จะนามแฝงไปrmtrash rmไม่เพียง แต่พวกเขาจะเข้ากันไม่ได้ แต่ยังจะบังคับใช้นิสัยที่ไม่ดีและคุณตั้งใจจะใช้ในระบบอื่นคิดว่าคุณเป็นเพียงการใช้rm rmtrash
Fayaz

1

เพียงแค่ต้องการเพิ่มนิสัยที่เป็นประโยชน์เพื่อเข้าร่วมสำหรับผู้ที่ไม่ได้ทำสิ่งนี้อยู่แล้ว ก่อนที่จะใช้ rm เพื่ออะไรให้ทำ 'ls' กับมันก่อน ด้วยวิธีนี้คุณสามารถดูไฟล์ทั้งหมดที่คุณต้องการลบ จากนั้นแทนที่จะพิมพ์ใหม่เพียงแค่ดึงคำสั่ง 'ls' ก่อนหน้านี้ขึ้นมาและสลับออก ls สำหรับ rm นิสัยนี้ลดความวิตกกังวลลงมากมายเมื่อเรียกใช้ rm


-1

บทนำ (คุณสามารถข้ามไปได้)

สำหรับฉันrm -iจะเพียงพอเพราะมันจะแจ้งให้คุณก่อนที่จะลบไฟล์ใด ๆ อย่างไรก็ตามการรักษาความปลอดภัยเพิ่มเติมบางอย่างที่จัดทำโดยsafe-rmไม่ได้เป็นความคิดที่ไม่ดีเลย

ความเรียบง่ายaliasอย่างเดียวrm=safe-rm -i อาจเพียงพอ แต่rm -rfก็ไม่ได้ผลเพราะ-iมันอยู่-fเหนือกว่า

ดังนั้นเราต้องแน่ใจว่า-iจะตามมาเสมอ-f!


โซลูชันของฉัน (3 ขั้นตอน):

  • ติดตั้ง safe-rm: brew install safe-rm

    คุณยังสามารถใช้งานได้rmแต่คุณได้แก้ไขRM_BINในขั้นตอนถัดไป

  • แก้ไขของคุณ~/.profile(หรือ bash_profile หรืออะไรก็ตาม) และใส่ข้อมูลโค้ดต่อไปนี้ (ซึ่งมีaliasและ a function):

    alias rm="rm_i"
    
    function rm_i(){
    RM_BIN=safe-rm # you can replace it with regular rm if you like
    
    args=""
    files=""
    argsDone=0 # to make sure arguments are before the files
    
    for var in "$@"
    do
        if [[ $var == \-* ]] ; then
            if [ $argsDone -eq 1 ] ; then
                $RM_BIN # just to show the usage of rm
                return
            fi
            args+=" $var"
        else
            argsDone=1
            files+=" $var"
        fi
    done
    
    args+=" -i" # Put -i at the end (so rm -rf will not ignore it)
    
    $RM_BIN $args $files
    }
    
  • สุดท้าย , logoutและloginเพื่อให้การปรับปรุงใน .profile ที่ถูกนำมาใช้ อย่าใช้มันก่อนที่จะออกจากระบบ / เข้าสู่ระบบ!


หมายเหตุ:

  • มันสามารถนำไปใช้กับลินุกซ์ distro ใด ๆ ด้วยการปรับเปลี่ยนเล็กน้อย
  • มันไม่ได้กระตุ้นพนักงานของคุณให้ฟาดฟัน มันจะถามคุณก่อนที่จะลบแต่ละไฟล์!
  • มันทำงานร่วมกับ-rfและกับ regexes
  • หากคุณต้องการใช้rm -rf โดยไม่ต้องมีการถามถึงทุกไฟล์ / โฟลเดอร์เดียวคุณยังคงสามารถใช้งานได้/bin/rm -rf(หรือsafe-rm -rfหากคุณติดตั้งไว้)
  • ไม่มีอีกโดยไม่ตั้งใจ rm -rf หรือ rm * ;)

5
การใช้นามแฝง rm กับสิ่งที่มีขนาดใหญ่กว่าตัวเอง (เช่นalias rm='sudo rm') ก็เหมือนกับการมัด Uzi กับมีดทำครัว: สักวันหนึ่งคุณจะได้รับมากกว่าที่คุณต่อรองเมื่อคุณไปตัดสับปะรดนั้น การใช้นามแฝงกับอะไรก็ตามที่เล็กกว่าตัวเอง (เช่นalias rm='rmtrash') ก็เหมือนกับการให้ลูก ๆ ของคุณเล่นด้วยระเบิดมือที่ไม่มีอาวุธและไม่สอนสิ่งที่พวกเขาเป็นจริง: สักวันหนึ่งเมื่อพวกเขาเจอของจริงพวกเขาจะไม่ปฏิบัติต่อมันด้วยความระมัดระวัง ไม่ว่าจะด้วยวิธีใดก็ตาม - การใช้นามแฝง rm นั้นไม่ดีต่อความปลอดภัยส่วนบุคคลและสุขภาพของคุณ!
คาเลบ

2
การใช้บางอย่างเช่น safe-rm เป็นคำแนะนำที่สมเหตุสมผล การใช้นามแฝงกับ rm ไม่ใช่ ใช้มันภายใต้ชื่อของตัวเองหรือนามแฝงที่ไม่ซ้ำกันเพื่อให้คุณไม่ได้รับตาข่ายความปลอดภัยที่จะไม่อยู่ที่นั่นเสมอ
คาเลบ

ฉันเห็นประเด็นของคุณ แต่เหตุผลที่ฉันทำสิ่งนี้คือฉันทำงานกับเทอร์มินัลมากมาย .. เทอร์มินัลระยะไกลและบางคนในท้องถิ่น และฉันต้องการที่จะโยนระเบิดมือจำนวนมากบนอาคารระยะไกล แต่เมื่อฉันบังเอิญดึงตราประทับความปลอดภัยบนสถานีท้องถิ่นฉันต้องการเห็นคำเตือนก่อนเกิดการระเบิด
Paschalis

@ Paschalis และจะเกิดอะไรขึ้นหากสคริปต์หรือโปรแกรมที่ติดตั้งจำเป็นต้องใช้rm? นอกจากนี้ประเด็นของ Caleb นั้นถูกต้องมากขึ้น - ถ้าคุณคุ้นเคยกับระบบที่ใช้ aliased ที่ปลอดภัยแล้วคุณอาจจะประมาทในเรื่องนั้นและในที่สุดก็ใช้มันในระบบที่มี rm ที่ไม่ได้รับการปรับแต่ง
Manishearth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.