교차 플랫폼을 휴지통으로 이동

Oct 25 2020

파일을 휴지통으로 이동하는 교차 플랫폼 방법이 있습니까? file delete파일을 완전히 삭제하며 unixen에서 실행 취소 할 수 없습니다. Linux에서만 휴지통 디렉토리를 찾는 것은 쉽지 않습니다. 파일 관리자에 자주 의존하기 때문입니다.

나는하기에 의지했다 :

exec gio trash $file

문제는 이것이 Gnome에서만 작동하므로 Linux에서도 크로스 플랫폼이 아닙니다.

그리고 Windows 시스템이 없기 때문에 Windows에서 휴지통 / 휴지통이 어떻게 작동하는지 파악하는 것이 훨씬 더 어렵습니다.

답변

2 SchelteBron Oct 25 2020 at 16:18

FreeDesktop.org 쓰레기 사양은 말합니다 :

모든 사용자가 "홈 휴지통"디렉토리를 사용할 수 있어야합니다. 이름과 위치는$XDG_DATA_HOME/Trash; $XDG_DATA_HOME은 데스크탑 기본 디렉토리 사양에 정의 된 사용자 별 데이터의 기본 디렉토리입니다.

만약 $XDG_DATA_HOME is unset or empty, it defaults to $홈 /.local/share.

그러나 ~ / .local / share / Trash 안팎으로 파일을 이동할 수는 없습니다. 원래 위치와 타임 스탬프를 저장하는 몇 가지 메타 데이터 파일이 있습니다. 이러한 메타 데이터 파일은 일반 텍스트이므로 Tcl에서 쉽게 처리 할 수 ​​있습니다.

따라서 이것은 Tcl 모듈에서 매우 쉽게 구현할 수있는 것처럼 들립니다. 그러나 그러한 모듈이 이미 존재한다면 나는 그것을 알지 못합니다. Tcl을 배우는 사람에게 좋은 프로젝트가 될 수 있습니다.

추가 정보 :

평소와 같이 TWAPI 는 Windows를 구출합니다. twapi_shell의 패키지는이 recycle_file명령을 사용합니다.

2 DonalFellows Oct 25 2020 at 22:25

macOS에서 수행하는 방법은 다음과 같습니다. 이를 위해서는 Tclapplescript 확장 패키지 가 필요합니다 .

package require Tclapplescript

proc trash args {
    set TRASH_CMD {
        tell application "Finder" to delete POSIX file "%s"
    }
    foreach file $args { set fullFilename [file normalize $file]
        set quoted [string map {\\ \\\\ \\" \\\\"} $fullFilename] AppleScript execute [format $TRASH_CMD $quoted]
    }
}

최신 버전의 macOS에서이 작업을 수행하려면 런타임에 적절한 권한을 부여해야합니다 (또는 적어도 테스트 할 때 필요했습니다).

또한보십시오:

  • https://apple.stackexchange.com/questions/50844/how-to-move-files-to-trash-from-command-line
  • AppleScript로 파일을 삭제하여 휴지통 또는 영구적으로 재활용