OS X`rm`을 안전하게 대체 하시겠습니까?


9

나는 rm더 안전한 것을 알리는 데 익숙합니다 .

사용 osx-trash하고 있지만 Ruby 1.9.2로 업그레이드하면 작동이 중지됩니다.

나는 trash-cli파이썬 에 대해 알고 있지만 파일을 다른 디렉토리가 아닌 OS X의 휴지통 폴더로 옮기는 것을 선호합니다.

누구든지 좋은 해결책이 있습니까?


9
, 별명에 익숙해하지는하십시오 rm, 오히려 익숙해 mv files/to/be/deleted ~/.Trash. 시스템 전체에서 안전 하고 일관됩니다.
Asmus

Asmus : Mac에 파티션이 하나만있는 경우에만 작동합니다. 다른 파티션이 있다면 ~ / .Trash로 이동하는 것이 실제로 올바르지 않습니다 (내 ~ 파티션이 충분하지 않습니다).
goneedng

1
글쎄, 당신은 당신의 질문에 여러 파티션이 있다고 언급해야합니다!
slhck

1
사라진 : 글쎄, 난 mv아직도 네가 가장 안전한 내기 인 것 같아 . 다른 파티션에 새 폴더 Trash(또는 원하는 폴더 )를 만든 다음 mv파일을 쉽게 만들 수 있습니다 . 삭제가 가능하면 완전한 폴더를 삭제하고 다시 만드십시오.
Asmus

다음은 ~ / .Trash의 공간이 충분 파티션에 휴지통 폴더에 소프트 링크가 될 수 있습니다
AlcubierreDrive

답변:


8

OSX의 경우 사용할 수 있습니다 safe-rm

brew install safe-rm

기본값보다 선호하는 추가 단계를 수행해야합니다 rm. symlink를 추가하십시오.

echo $PATH

나를 위해, 나는 /usr/local/bin:먼저 safe-rm설치 와 동일한 디렉토리를 가지고 있습니다

에 심볼릭 링크 추가 safe-rm

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

기본값을 제거하고 복원하려면 rmsymlink를 제거하십시오.rm /usr/local/bin/rm

구성 파일은 /etc/safe-rm.conf

예 :

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

rm -rf /test그것으로 테스트 에서 삭제를 거부합니다safe-rm.conf


또한 추가하는 좋은 수 있습니다 /고전은 rm -fr / 방지하기 위해 삭제해서는 안 경로의 목록에
미카엘 Lepistö

3

hasseg.org/trashosx-trash 와 같은 Objective-C 유틸리티 입니다.

필자는 파일을 덮어 쓰지 않는 쉘 함수를 작성했습니다 mv * ~/.Trash. 항상 항목을 시작 볼륨으로 이동합니다.

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
}

그래, 나는 1 개 이상의 파티션을 가지고 차라리 통해 그들을 이동하는 것보다 동일한 파티션에서 삭제 된 파일을 유지하려는 것
disappearedng

다른 두 유틸리티와 다른 기능에 대한 링크를 추가했습니다. 각각은 파일을 동일한 파티션에 보관해야합니다.
Lri

2

소개 (당신은 그것을 생략 할 수 있습니다)

나를 위해 rm -i이 모든 파일을 삭제하기 전에 메시지를 표시하기 때문에, 충분한 것이다. 그러나 제공되는 추가 보안 safe-rm은 전혀 나쁜 생각이 아닙니다.

간단한 aliasrm=safe-rm -i 있지만, 충분 rm -rf하기 때문에, 작동하지 않을 것입니다 -i의해 오버라이드 (override)됩니다 -f.

그래서 우리는 -i항상 뒤 따르 도록해야합니다 -f!


내 솔루션 (3 단계) :

  • safe-rm 설치 : brew install safe-rm

    계속 작업 할 수 rm있지만 RM_BIN다음 단계에서를 수정했습니다 .

  • ~/.profile(또는 bash_profile 또는 무엇이든)을 편집 하고 다음 코드 스 니펫 ( alias및 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
    }
    
  • 마지막으로 , logoutlogin.profile의 업데이트가 적용됩니다. 로그 아웃 / 로그인하기 전에 사용 하지 마십시오 !


노트:

  • 약간의 수정으로 모든 Linux 배포판에 적용 할 수 있습니다.
  • 스태프를 움직이지 않습니다. 각 파일을 삭제하기 전에 묻습니다!
  • -rf정규식과 함께 작동합니다 .
  • 모든 단일 파일 / 폴더에 대해 요청 rm -rf 없이 WITHOUT 을 사용하려는 경우 계속 사용할 수 있습니다 /bin/rm -rf(또는 safe-rm -rf설치 한 경우).
  • 더 이상 의도하지 않은 rm -rf 또는 rm * ;)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.