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

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

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

답변1

거기에webupd8.org의 레시피이를 위해. 링크 부패를 방지하기 위한 중요한 정보는 다음과 같습니다(몇 가지 추가 사항 포함).

sudo apt-get install trash-cli

그러면 있는 그대로 사용하거나 별칭을 만들 수 있는 trash, empty-trash및 명령 list-trash이 설치됩니다 (아래 참조).restore-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에 별명을 추가하십시오. 그러면 bash가 실제 명령 대신 스크립트를 호출하게 됩니다 rm.

alias rm="trash-rm"

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

그리고 그게 다여야합니다.

답변2

libtrash(Ubuntu의 libtrash 패키지)가 이 작업을 수행하는 것 같지만 한 번도 사용한 적이 없습니다.

관련 정보