Bagaimana saya bisa membuat 'rm' memindahkan file ke tempat sampah?

62

Saya menggunakan terminal setiap hari, saya akan sering menggunakan rm DirectoryName. Terkadang saya menjadi sedikit gila dan melakukannya rm *. Seperti yang dapat Anda bayangkan, para shenanigans ini kadang-kadang kembali dan memukul wajah saya. Adakah yang tahu cara membuat pemetaan sehingga rm whatevermemindahkan semuanya ke tempat sampah yang kemudian saya hapus secara manual.

steve
sumber
3
Anda dapat melakukannyamv /file/to/delete ~./Trash
6
Sulit untuk menempatkan roda pelatihan pada alat presisi seperti rm tanpa merusak skrip lain. Sesuatu seperti alias rm=/bin/rm -iseharusnya membuat Anda aman dari gila Anda . Juga - direktori tempat sampah yang ingin Anda gunakan rm? Itu menjadi kikuk karena Mac OS X memiliki direktori tempat sampah untuk setiap volume serta tempat sampah tingkat pengguna.
bmike
1
Jika Anda menggunakan zsh, secara default itu akan meminta Anda ketika Anda melakukannya rm *ataurm /path/*
Daniel Serodio
1
Tambahkan saya ke daftar orang-orang yang berpikir ini adalah pertanyaan yang sangat berbahaya untuk dijawab. Jika Anda bekerja untuk saya, saya akan berjuang untuk tidak menampar Anda sampai Anda berjanji untuk tidak pernah "menjadi sedikit gila" di prompt shell dan mengeluarkan perintah seperti 'rm'. Saya juga akan memastikan bahwa Anda tidak memiliki hak administratif sudo untuk mesin apa pun yang saya gunakan atau memiliki tanggung jawab untuk. Sebelum saya mengetik "rm" atau "sudo", saya secara fisik berdiri dan bertanya pada diri sendiri apakah saya 100% yakin bahwa saya memahami dampak dari apa yang akan saya lakukan. Mungkin Anda hanya perlu melakukan "rm -rf" dan menderita untuk sementara waktu.
Wilfred Smith
Permintaan maaf sebelumnya jika komentar saya tampaknya brutal, tetapi pertanyaan itu sangat menakutkan saya.
Wilfred Smith

Jawaban:

79

Ide buruk

Menggunakan rmuntuk memindahkan file ke sampah sama seperti gulma. Itu biasa dan menyenangkan tetapi bisa berdampak buruk bagi Anda di masa depan. ;)

Anda benar-benar perlu mengendalikan diri saat menggunakan rm.


Jangan gunakan rm

Bayangkan , Anda terbiasa bergerak ke tempat sampah dan membiasakan diri. Tentu, sistem Anda aman tetapi ketika Anda masuk ke buku catatan teman (atau istri atau bos Anda) dan harus menghapus sesuatu? Anda akan benar-benar menggunakan file nyata rm- menghapus selamanya. Ini kebiasaan buruk, dan Anda perlu tahu itu.

Jadi alih-alih, instal rmtrashdan biasakan menggunakannya:

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

Memperbaiki kebiasaan buruk

Hal lain yang dapat Anda lakukan untuk memaksa diri Anda untuk menggunakan rmtrashbukan rmmerupakan alias untuk pesan khusus di Anda .profile.

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

Jadi, setiap kali Anda menggunakan rm, Anda akan diminta untuk menggunakan rmtrashatau /bin/rm. Ingat, ini hanya sementara, setelah beberapa saat Anda harus menghapus alias.


Tidak pernah, lakukan hal seperti ini:

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

Kuis Pop: Di direktori apa rmperintah akan dijalankan? :)

Ps: Baru saja menghapus beberapa suntingan yang tidak diinginkan pada posting ini, apa yang menambahkan beberapa omong kosong tentang alias.

jm666
sumber
14
&&adalah garis hidup Anda. ;adalah iblis PS Jawabannya adalah bahwa hampir semua yang ada di sistem Anda menghilang, dalam contoh di atas.
Jason Salaz
Meskipun, rm tidak melakukan penghapusan aman, tetapi pindah ke tempat sampah / kosong tidak (dalam pengaturan saya).
Mike Graf
1
Pengguna Debian / Ubuntu trash-climalah menginstal , mis. aptitude install trash-cli- lihat github.com/andreafrancia/trash-cli
Daniel Sokolowski
@ jm666 Juga periksa sampah ( posting & sumber blog ). Ia meminta Finder untuk membuang file. Selain itu juga dapat menggunakan API sistem file Objective C standar (lebih cepat) dan mundur ke Finder jika tidak cukup hak. brew install trash
parth
rmtrashbenar-benar tua, yang terakhir diperbarui pada 2003, dan itu menunjukkan. Ini memiliki banyak pilihan lebih sedikit daripada rm, dan jika Anda mengatakan rmtrashpada volume sekunder itu memindahkan file-file tersebut ke folder sampah pengguna Anda pada drive sistem, yang dapat memakan waktu lama untuk file besar. The trashpilihan yang disarankan oleh parth lebih baik, memecahkan masalah terus-on-sama-volume, tapi masih hilang banyak rmpilihan.
Warren Young
25

Saya bisa memikirkan selusin cara untuk kode ini, tetapi pasti menolak untuk mengetikkan salah satu dari mereka dalam jawaban. Saya sangat menyarankan Anda menghentikan kebiasaan Anda menjadi sedikit gila . Anda seharusnya tidak terbiasa menggunakan rmsama sekali jika Anda tidak dapat menggunakannya dengan benar.

Masalah mendasar di sini adalah bahwa bahkan jika Anda memasang jaring pengaman di sistem Anda sendiri, itu hanya akan membantu Anda menjaga kebiasaan buruk Anda dan ketika Anda kebetulan berada di komputer lain suatu hari yang tidak memiliki perlindungan kustom yang sama, Anda akan melakukan sesuatu yang sangat buruk.

Solusi yang tepat adalah menggunakan rmsebagaimana seharusnya digunakan termasuk menambahkan -iargumen secara manual setiap kali Anda ragu tentang bagaimana gumpalan akan berkembang, dan memiliki cadangan sistem yang baik yang dapat Anda pulihkan jika terjadi kesalahan pengguna yang serius. Mencoba menambahkan "sampah" ke perintah yang di seluruh dunia tidak digunakan adalah langkah setengah jalan yang merupakan yang terburuk dari kedua dunia.

Baik menggunakan tempat sampah atau tidak. Menggunakanrmtidak pergi ke tempat sampah, itu menghapus.

Jika Anda ingin menggunakan tempat sampah, tidak ada yang salah dengan itu. Biasakan menggunakan rmtrashperintah alih-alih rm. Ini akan membantu otak Anda memahami apa yang terjadi dan tidak membuat Anda menjadi kebiasaan buruk yang akan menyebabkan kesedihan nanti.

Caleb
sumber
1
Poin Anda tidak menghitung dalam hal ini. Orang-orang menghapus hal-hal secara tidak sengaja setiap hari, cadangan sistem tidak berfungsi dalam kasus komputer rumahan (yang tambangnya) karena sumber dayanya terbatas, perpindahan ke tempat sampah adalah cara yang jauh lebih efisien untuk menangani penghapusan ini khusus untuk saya gunakan kasing.
steve
5
@veve Anda benar-benar melewatkan intinya. rmmenurut definisi menghapus file dari disk. Itu tidak mengirimnya ke tempat sampah. Mengajari diri Anda untuk menggunakan rmketika maksud Anda mengirim ke tempat sampah membuat Anda siap menghadapi bencana. Jika Anda ingin mengirim ke tempat sampah, menggunakan rmtrashatau program yang dirancang untuk pekerjaan itu, maka Anda tidak akan mengalami mimpi buruk nanti. Saya tidak mengatakan bahwa menggunakan sampah pada dasarnya salah, tetapi jika Anda ingin menggunakannya, jangan menghubungkannya dengan sesuatu yang tidak dimaksudkan untuk menggunakannya!
Caleb
2
brew install rmtrashdan berhenti menggunakanrm
GabLeRoux
Ini jawaban yang luar biasa, membereskan beberapa hal untuk saya. Saya akan mencoba membentuk kebiasaan menggunakan rmtrashalih-alih rm.
Sheharyar
sudo add-apt-repository ppa: nateshmbhat / rm-trash. Kemudian instal "rm-trash"
Natesh bhat
3

Ada beberapa cara untuk melindungi diri dari hasil yang mengerikan rm. Namun, saya setuju dengan komentator lain di sini: sangat sedikit yang baik.

Jangan sebentar percaya bahwa mengubah lingkungan perintah akan membantu Anda. Misalnya, Anda akan menemukan orang-orang yang online di mana-mana merekomendasikan melakukan hal semacam ini:

alias rm="rm -i"

atau

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

Ini tidak akan berfungsi. Titik. Ada banyak kasus penggunaan di mana trik ruang tamu kecil ini akan mengecewakan Anda dengan menyedihkan.

Satu-satunya cara kuat yang saya gunakan untuk menyelamatkan diri dari bahaya rmadalah dengan mengatur proses pencadangan rutin melalui cron di direktori tempat saya bekerja. Raw UNIX melakukannya untuk Anda dengan baik, dengan sangat mudah, menggunakan findbersama dengan -mtimeuntuk memeriksa file yang telah diperbarui dalam atau sejak waktu tertentu.

Jim Campbell
sumber
+1 untuk cronsendirian. Terima kasih :)
bmike
2

Gunakan alat baris perintah seperti rmtrash atau skrip menggunakan appscript untuk memanggil Finder untuk menghapusnya.

Setelah menginstal rmtras untuk mengatakan / usr / local / bin / rmtrash pembuat alias untuk bash

alias rm='rmtrash'

Anda dapat menggunakan \ rm untuk memanggil rm secara langsung dan mengabaikan alias

pengguna151019
sumber
14
Jika Anda menggunakan alat seperti rmtrash, tolong lakukan sendiri dan gunakan dengan nama sendiri . Tidak pernah alias hal-hal yang tidak rmuntuk rm, itu akan beberapa hari menggigit Anda.
Caleb
1
rmtrashtidak kompatibel dengan rm(tidak mendukung parameter baris perintah yang sama seperti -r) sehingga alias benar-benar tidak berguna dalam hal apa pun
Perry
Ini adalah ide yang buruk untuk alias rmtrashuntuk rm. Tidak hanya mereka tidak kompatibel, tetapi juga akan menegakkan kebiasaan buruk dan Anda akan secara tidak sengaja menggunakan rmdi sistem lain berpikir Anda hanya menggunakan rmtrash.
Fayaz
1

Hanya ingin menambahkan kebiasaan yang bermanfaat untuk Anda yang belum melakukannya. Sebelum menggunakan rm untuk apa pun, lakukan 'ls' terlebih dahulu. Dengan begitu Anda bisa melihat semua file yang ingin Anda hapus. Kemudian alih-alih mengetik ulang, cukup tarik perintah 'ls' sebelumnya dan tukar ls dengan rm. Kebiasaan ini telah mengurangi banyak kecemasan ketika memohon rm.

Scott Bridgman
sumber
-1

Pendahuluan (Anda dapat melewati itu)

Bagi saya rm -iakan cukup, karena meminta Anda sebelum menghapus file apa pun. Namun, beberapa keamanan tambahan yang diberikan oleh safe-rmbukan ide yang buruk sama sekali.

Sederhana aliasseperti rm=safe-rm -i bisa cukup, tetapi rm -rftidak akan berhasil, karena -iditimpa oleh -f.

Jadi, kita harus memastikan itu -iselalu datang -f!


Solusi saya (3 langkah):

  • Instal safe-rm: brew install safe-rm

    Anda masih dapat bekerja dengan rm, tetapi Anda telah memodifikasi RM_BINlangkah selanjutnya

  • Edit ~/.profile(atau bash_profile atau apa pun) Anda, dan masukkan potongan kode berikut, (yang berisi aliasdan 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
    }
    
  • Akhirnya , logoutdan login, jadi pembaruan dalam profil. Berlaku. JANGAN menggunakannya sebelum keluar / masuk!


Catatan:

  • Itu dapat diterapkan ke distro Linux apa pun, dengan sedikit modifikasi.
  • Ini TIDAK memindahkan staf Anda ke thrash. Itu hanya meminta Anda sebelum menghapus setiap file!
  • Ini bekerja dengan -rfdan dengan regex.
  • Jika Anda benar-benar ingin menggunakan rm -rf TANPA diminta untuk setiap file / folder tunggal Anda masih dapat menggunakan /bin/rm -rf(atau safe-rm -rfjika Anda telah menginstalnya).
  • Tidak ada lagi yang tidak disengaja rm -rf atau rm * ;)
Paschalis
sumber
5
Mengasingkan rm ke sesuatu yang lebih besar dari dirinya sendiri (misalnya alias rm='sudo rm') seperti mengikatkan Uzi ke pisau dapur: suatu hari nanti Anda akan mendapatkan lebih dari yang Anda tawar ketika Anda akan memotong nanas itu. Mengasingkan diri ke sesuatu yang lebih kecil dari dirinya sendiri (mis. alias rm='rmtrash') Adalah seperti membiarkan anak-anak Anda bermain dengan granat tangan yang dilucuti dan tidak mengajari mereka apa mereka sebenarnya: suatu hari ketika mereka menemukan yang asli mereka tidak akan memperlakukannya dengan hati-hati. Either way — aliasing rm tidak baik untuk keselamatan pribadi Anda dan kesehatan masyarakat!
Caleb
2
Menggunakan sesuatu seperti safe-rm adalah saran yang masuk akal. Mengalihkannya ke rm bukan. Gunakan dengan nama sendiri atau alias unik sehingga Anda tidak menerima begitu saja jaring pengaman yang tidak akan selalu ada di sana.
Caleb
Saya mengerti maksud Anda. TAPI, alasan saya melakukan ini, adalah bahwa saya bekerja dengan banyak terminal .. beberapa terminal jarak jauh, dan beberapa penduduk setempat. Dan saya ingin melemparkan banyak granat ke terminal jarak jauh, tetapi ketika saya secara tidak sengaja menarik segel pengaman di terminal lokal, saya ingin melihat peringatan sebelum ledakan terjadi.
Paschalis
@Paschalis dan apa yang terjadi jika skrip atau program yang diinstal perlu digunakan rm? Juga, poin Caleb bahkan lebih valid - jika Anda terbiasa dengan sistem dengan safe-rm alias, maka Anda mungkin menjadi ceroboh dengan itu dan akhirnya menggunakannya pada sistem dengan rm yang tidak diubah.
Manishearth