OS X `rm` için güvenli alternatif?


9

Daha rmgüvenli bir şey takma yapmaya alışkınım .

Ben kullanıyorum osx-trash, ama Ruby 1.9.2 yükseltme işleminden sonra, bu çalışma durur.

trash-cliPython hakkında biliyorum , ama çok başka bir dizin yerine OS X'te Çöp Kutusu klasörüne dosyaları taşıyan bir şey tercih ediyorum.

Herkes iyi bir çözüm var mı?


9
Lütfen, takma adı kullanmaya alışmayın rm, alışmaya alışın mv files/to/be/deleted ~/.Trash. Sistemler arasında güvenli ve tutarlıdır.
— Asmus

Asmus: Sadece mac'unuzda sadece 1 bölüm varsa işe yaradığını görürsünüz. Başka bir bölümünüz varsa, ~ / .Trash öğesine geçmek gerçekten doğru değil (bölümüm yeterince büyük değil).
— disappearedng

1
Sorunuzda birden fazla bölümünüz olduğunu söylemeliydiniz!
— slhck

1
disappearedng: iyi, bence mvhala en güvenli bahis. Diğer bölümünüzde Trash(veya istediğiniz gibi) yeni bir klasör ve ardından mvoradaki dosyaları kolayca oluşturabilirsiniz . Silinebileceğinden emin olduktan sonra, bu klasörü silin ve yeniden oluşturun.
— Asmus

ve sonra ~ / .Trash, yeterli boşluğa sahip olan bölümdeki Çöp Kutusu klasörüne yumuşak bir bağlantı olabilir
— AlcubierreDrive

Yanıtlar:


8

OSX için şunları kullanabilirsiniz: safe-rm

brew install safe-rm

Varsayılana göre tercih etmek için fazladan bir adım atmanız gerekir rm- bir sembolik bağlantı ekleyin.

echo $PATH

Benim için, /usr/local/bin:önce, safe-rmkurulumla aynı direk var

Simgesine simge bağlantısı ekle safe-rm

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

Varsayılanı kaldırmak ve geri yüklemek rmiçin sembolik bağlantısı kaldırabilirsinizrm /usr/local/bin/rm

Yapılandırma dosyası şuradan eklenebilir: /etc/safe-rm.conf

Örneğin:

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

Onunla sınama rm -rf /test,safe-rm.conf


/klasik rm -fr'yi önlemek için silinmemesi gereken yollar listesine de eklemek iyi olabilir /
— Mikael Lepistö

3

hasseg.org/trash osx-trash gibi Objective-C yardımcı programıdır .

Ben gibi dosyaların üzerine yazmayan bir kabuk fonksiyonu yazdım mv * ~/.Trash. Yine de her zaman öğeleri başlangıç ​​hacmine taşır.

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
}

Evet 1'den fazla bölüm var ve silinen dosyaları onları taşımak yerine aynı bölümde tutmak istiyorum
— disappearedng

Diğer iki yardımcı programa ve başka bir işleve bağlantılar ekledim. Her biri dosyaları aynı bölümde tutmalıdır.
— Lri

2

Giriş (atlayabilirsiniz)

Benim rm -iiçin yeterli olurdu, çünkü herhangi bir dosyayı silmeden önce sizi uyarır. Ancak, bazı ekstra güvenlik safe-rmkötü bir fikir değildir.

Basit bir aliasşey yeterli rm=safe-rm -i olabilir , ancak rm -rfişe yaramaz, çünkü -igeçersiz kılınmıştır -f.

Yani, bunun -iher zaman peşinden gittiğinden emin olmalıyız -f!


Benim çözümüm (3 adım):

  • Safe-rm yükleyin: brew install safe-rm

    Hala üzerinde çalışabilirsiniz rm, ancak RM_BINsonraki adımda

  • Düzenleme senin ~/.profile(veya bash_profile ya da her türlü) ve (bir içerirler Aşağıdaki kod parçacığını, koyun aliasve 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
    }
    
  • Son olarak , logoutve loginböylece .profile güncelleştirmeleri uygulanır. Oturumu kapatmadan / oturum açmadan önce KULLANMAYIN !


Notlar:

  • Küçük değişikliklerle herhangi bir Linux dağıtımına uygulanabilir.
  • Personelinizi thrash'e taşımaz. Sadece her dosyayı silmeden önce sorar!
  • Normal -rfifadelerle ve normal ifadelerle çalışır .
  • Eğer hala kullanabileceğiniz her bir dosya / klasör için rm -rf OLMADAN gerçekten kullanmak istiyorsanız /bin/rm -rf(veya safe-rm -rfyüklediyseniz).
  • Artık istemeden rm -rf veya rm * ;)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.