rm에 대한 호출을 가로 채고 삭제 된 파일을 휴지통으로 보냅니다.


10

rm에 대한 호출을 가로 채고 파일을 영구적으로 삭제하는 대신 휴지통으로 옮기는 방법이 있습니까?


얼마나 보편적입니까? 모든 사용자 또는 프로세스의 모든 rm 호출을 의미합니까? 또는 bash를 사용하는 동안 당신을 위해?
djeikyb

답변:


13

webupd8.org레시피 가 있습니다 . 링크 부패를 방지하기 위해 다음과 같은 중요한 정보가 있습니다.

sudo apt-get install trash-cli

그러면 , 및 명령 이 설치 trash되며 empty-trash, 그대로 사용하거나 별명 을 지정할 수 있습니다 (아래 참조).list-trashrestore-trashrmtrash

trash명령 의 의미는 표준과 약간 다릅니다 . 디렉토리를 삭제하기 위해 플래그가 rm필요하지 않습니다 -r. 이것이 당신을 귀찮게한다면, webupd8.org는 PATH에 넣고 호출 할 수있는 다음 스크립트를 제안합니다 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 이상에서는 스크립트의 마지막 명령 trash-put "${cmd[@]}"대신 trash "${cmd[@]}"명령이에서 trash로 변경 되어야합니다 trash-put.

그런 다음 스크립트를 실행 가능하게 만드십시오.

chmod +x trash-rm

PATH~의 디렉토리에 별칭이 있으면 ~ / .bashrc에 별칭을 추가하면 실제 rm명령 대신 bash가 스크립트를 호출합니다 .

alias rm="trash-rm"

djeikyb가 올바르게 지적했듯이 .bashrc 별칭 트릭은 .bashrc가 수정 된 사용자와 bash 터미널 세션에서만 작동합니다.

그리고 그것이되어야합니다.


이것은 좋은 대답이지만 별칭을 사용하는 주요 개념을 강조하도록 재구성하면 더 좋습니다. rm을 "절편"하는 방법을 이해하는 것이 가장 중요하다고 생각합니다. 그 자리에서 일어나는 일은 여러 가지 방법으로 사용자 정의 할 수 있습니다.
djeikyb

또한 이것은 사용자의 bash 세션에 대한 rm 명령에만 영향을 미친다는 점을 언급하는 것이 좋습니다.
djeikyb

@ djeikyb : 제안 주셔서 감사합니다, 나는 답변을 업데이트
세르게이

스크립트없이 설치하면됩니다 (방금 설치하고 추가하십시오 alias="trash"). 스크립트를 사용하면 어떤 이점이 있는지 알고 있습니까?
desgua

@desgua : 스크립트의 목적은 디렉토리 삭제와 관련하여 trash보다 유사하게 동작하도록하는 것 rm입니다. rm예를 들어, 작동 방식 을 기대 하는 일부 스크립트의 경우이 기능이 중요 할 수 있습니다 . 나는 대답을 업데이트했다.
Sergey

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.