Pengganti yang aman untuk OS X `rm`?

9

Saya sudah terbiasa rmdengan alias sesuatu yang lebih aman.

Saya telah menggunakan osx-trash, tetapi begitu saya memutakhirkan ke Ruby 1.9.2, ini berhenti berfungsi.

Saya tahu tentang trash-clidari Python, tapi saya lebih suka sesuatu yang memindahkan file ke folder Trash di OS X daripada direktori lain.

Adakah yang punya solusi yang bagus?

menghilang
sumber
9
Tolong, jangan terbiasa dengan alias rm, alih-alih terbiasa mv files/to/be/deleted ~/.Trash. Aman dan konsisten di seluruh sistem.
Asmus
Asmus: Anda melihat itu hanya berfungsi jika mac Anda hanya memiliki 1 partisi. Jika Anda memiliki partisi lain, pindah ke ~ / .Trash tidak benar-benar benar (partisi ~ saya tidak cukup besar).
menghilang
1
Nah, Anda seharusnya menyebutkan dalam pertanyaan Anda bahwa Anda memiliki beberapa partisi!
slhck
1
menghilang: nah, saya pikir mvini masih taruhan teraman Anda. Anda dapat dengan mudah membuat folder baru di partisi lain yang disebut Trash(atau bagaimanapun Anda suka) dan kemudian mvfile-file di sana. Setelah yakin dapat dihapus, hapus dan buat kembali folder lengkap itu.
Asmus
dan kemudian Anda bisa saja ~ / .Trash menjadi tautan lunak ke folder Sampah di partisi yang memiliki cukup ruang
AlcubierreDrive

Jawaban:

8

Untuk OSX, Anda bisa menggunakan safe-rm

brew install safe-rm

Anda perlu melakukan langkah ekstra untuk memilihnya daripada default rm- tambahkan symlink.

echo $PATH

Bagi saya, saya punya /usr/local/bin:dulu, dir yang sama dengan safe-rmmenginstal

Tambahkan symlink ke safe-rm

ln -s /usr/local/bin/safe-rm /usr/local/bin/rm

Untuk menghapus dan mengembalikan default, rmAnda dapat menghapus symlinkrm /usr/local/bin/rm

File config dapat ditambahkan di /etc/safe-rm.conf

misalnya:

/private
/Applications
/Developer
/Library
/Network
/System
/Users
/Volumes
/test

Uji dengan rm -rf /testitu akan menolak darisafe-rm.conf

David Thomas
sumber
mungkin baik untuk menambahkan juga /ke daftar jalur yang tidak boleh dihapus untuk mencegah rm -fr klasik /
Mikael Lepistö
3

hasseg.org/trash adalah utilitas Objective-C seperti osx-trash .

Saya telah menulis fungsi shell yang tidak menimpa file seperti mv * ~/.Trashmau. Itu selalu memindahkan item ke volume startup.

trash() {
    for f in "$@"; do
        bn=$(basename "$f")
        while [ -e ~/.Trash/"$bn" ]; do
            bn="$bn $(date +%H.%M.%S %p)"
        done
        mv "$f" ~/.Trash/"$bn"
    done
}
Lri
sumber
Ya saya memiliki lebih dari 1 partisi dan saya ingin menyimpan file yang dihapus di partisi yang sama daripada memindahkannya
menghilang
Saya menambahkan tautan ke dua utilitas lain dan fungsi lainnya. Masing-masing harus menyimpan file di partisi yang sama.
Lri
2

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 Anda atau apa pun), 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