Rm çağrılarını durdurma ve silinen dosyaları çöp kutusuna yönlendirme


10

Rm çağrılarını durdurmanın ve dosyaları kalıcı olarak silmek yerine, onları çöp kutusuna taşımak yerine bir yolu var mı?


Ne kadar evrensel soruyorsun? Her kullanıcı veya işlem tarafından yapılan her rm çağrısı için mi demek istediniz? Yoksa bash kullanırken sadece sizin için mi? Veya ..
djeikyb

Yanıtlar:


13

Bunun için webupd8.org'da bir tarif var . Bağlantı çürümesini önlemek için, önemli bilgiler (birkaç ekleme ile).

sudo apt-get install trash-cli

Bu kuracak trash, empty-trash, list-trashve restore-trashonu olduğu gibi kullanımı veya yapabilirsiniz komutlar, rmbir diğer ad trash(aşağıya bakınız).

trashKomutun semantiği standarttan biraz farklıdır rm- -rdizinleri silebilmek için bayrak gerektirmez . Bu sizi rahatsız ediyorsa, webupd8.org, PATH'inize koyabileceğiniz ve onu çağırabileceğiniz aşağıdaki komut dosyasını önerir trash-rm:

#!/bin/bash
# command name: trash-rm
shopt -s extglob
recursive=1
declare -a cmd
((i = 0))
for f in "$@"; do
    case "$f" in

        (-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv]))
            tmp="${f//[rR]/}"
            if [ -n "$tmp" ]; then
                #echo "\$tmp == $tmp"
                cmd[$i]="$tmp"
                ((i++))
            fi
            recursive=0
        ;;

        (--recursive) recursive=0
        ;;

        (*)
            if [ $recursive != 0   -a  -d "$f" ]; then
                echo "skipping directory: $f"
                continue
            else
                cmd[$i]="$f"
                ((i++))
            fi
        ;;

    esac
done
trash "${cmd[@]}"

Ubuntu 12.04 ve üstü, senaryoda geçen komut olmalıdır trash-put "${cmd[@]}"yerine trash "${cmd[@]}"(komut dönüşmesiyle trashiçin trash-put).

Ardından komut dosyasını yürütülebilir yapın:

chmod +x trash-rm

Bir dizinde bulunduğunuzda PATH, ~ / .bashrc dosyanıza gerçek rmkomut yerine komut dosyanızı çağırmak için bash yapacak bir diğer ad ekleyin :

alias rm="trash-rm"

Djeikyb doğru şekilde işaret ettiği gibi, .bashrc takma adı yalnızca .bashrc değiştirilmiş olan kullanıcı için ve yalnızca bash terminal oturumunda çalışır.

Ve bu olmalı.


Bu iyi bir cevaptır, ancak bir takma ad kullanma ana kavramını vurgulamak için yeniden düzenlediyseniz daha da iyi olurdu. Ben rm nasıl "araya" anlamak için en önemli olduğunu düşünüyorum. Onun yerine ne olursa olsun herhangi bir şekilde özelleştirilebilir.
djeikyb

Ayrıca, bunun yalnızca kullanıcının bash oturumu için rm komutunu etkilediğini belirtmek iyi olur.
djeikyb

@djeikyb: Öneriler için teşekkürler, cevabı güncelledim
Sergey

Senaryo olmadan benim için harika çalışıyor (sadece yüklü ve ekle alias="trash"). Senaryoya sahip olmanın avantajını biliyor musunuz?
desgua

@desgua: Senaryonun amacı, dizinleri silme konusunda trashdaha çok davranmaktır rm. Bu, rmörneğin çalıştığı gibi bekleyen bazı komut dosyaları için önemli olabilir . Cevabı güncelledim.
Sergey

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.