나는 많은 터미널 작업을하고 있으며 오늘은 타이핑 경험이있었습니다
rm fileInQuestion.txt
실제로 fileInQuestion.txt가 필요하다는 것을 알기 전에. GUI에서 삭제했다면 휴지통에서 가져 왔을 것입니다. 터미널에서 'rm'을 오버로드하여 파일 / 파일을 휴지통으로 보내는 방식으로 과부하가 가능한지 알고 싶습니다.
나는 많은 터미널 작업을하고 있으며 오늘은 타이핑 경험이있었습니다
rm fileInQuestion.txt
실제로 fileInQuestion.txt가 필요하다는 것을 알기 전에. GUI에서 삭제했다면 휴지통에서 가져 왔을 것입니다. 터미널에서 'rm'을 오버로드하여 파일 / 파일을 휴지통으로 보내는 방식으로 과부하가 가능한지 알고 싶습니다.
답변:
나는 앨리어싱을 조언하지 않을 rm
에 mv
당신의 습관을 하듯이 rm
영구적으로 삭제하지 파일과 다음이 때 다른 컴퓨터 또는 다른 사용자 계정에서 문제로 실행 않습니다 영구적으로 삭제합니다.
나는 일련의 작성 bash
(같은 내장 된 사람의 숫자 이외에 더 맥 OS X와 같은 명령 행 도구를 추가 스크립트 open
, pbcopy
, pbpaste
가장 중요한 것은, 등) trash
. 내 버전은 trash
앨리어싱 rm
이하지 않는 모든 올바른 작업을 수행하며 (아마도 나쁘지 않지만 데이터 손실없이 몇 년 동안 내 Mac에서 사용했습니다) Finder와 같은 파일 이름 바꾸기 동일한 이름의 파일이 이미 존재하는 경우 외부 볼륨의 올바른 휴지통에 파일을 넣습니다. 또한 다음과 같은 추가 기능이 있습니다. 사용 가능한 경우 AppleScript를 사용하여 멋진 휴지통 소리를 얻습니다 (그러나 사용자가 로그인하지 않은 경우 SSH를 통해 계속 사용할 수 있음). 모든 볼륨에서 휴지통 크기를 제공합니다.
내 사이트 또는 GitHub 리포지토리 에서 가장 최신 버전의 tools-osx 제품군을 가져올 수 있습니다 .
이 또한의 알리 Rantakari에 의해 개발 된 명령은 ,하지만 난 한 것을 자신을 테스트하지 않았습니다.trash
trash
Rantakari가 꽤 오랫동안 사용 했으며 실제로 그것을 보증 할 수 있습니다. Objective-C로 컴파일되고 표준 파일 시스템 API를 영리하게 사용하며, 실패 할 경우 (즉, 사용자에게 충분한 권한이없는 경우) 파인더를 호출하여 파일을 휴지통으로 보냅니다 (인증을 효과적으로 요청 함). hasseg.org/blogtrash
에서 더 많은 정보를 읽을 수 있습니다 .
brew install trash
.
brew remove trash
다음과 brew install trash
.
쓰레기 명령 행 도구를 통해 설치 될 수 있습니다 brew install trash
.
명령 줄이나 Finder를 통해 휴지통에있는 파일을 복원 할 수 있습니다.
port install trash
brew install trash
: 나는이 얻을 pastebin.com/N92cM7d8
brew update
먼저 했습니까 ? 내 말에 잘 작동합니다.
다음 내용을 가진 rem
어딘가에 실행 파일이 $PATH
있습니다.
편집 : 아래 코드는 Dave Abrahams 와 협력 하여 수정되고 개선 된 버전 입니다 .
#!/usr/bin/env python
import os
import sys
import subprocess
if len(sys.argv) > 1:
files = []
for arg in sys.argv[1:]:
if os.path.exists(arg):
p = os.path.abspath(arg).replace('\\', '\\\\').replace('"', '\\"')
files.append('the POSIX file "' + p + '"')
else:
sys.stderr.write(
"%s: %s: No such file or directory\n" % (sys.argv[0], arg))
if len(files) > 0:
cmd = ['osascript', '-e',
'tell app "Finder" to move {' + ', '.join(files) + '} to trash']
r = subprocess.call(cmd, stdout=open(os.devnull, 'w'))
sys.exit(r if len(files) == len(sys.argv[1:]) else 1)
else:
sys.stderr.write(
'usage: %s file(s)\n'
' move file(s) to Trash\n' % os.path.basename(sys.argv[0]))
sys.exit(64) # matches what rm does on my system
Finder에서 삭제하는 것과 정확히 같은 방식으로 작동합니다. (블로그 게시물은 여기를 참조 하십시오 .)
~/bin
이름을 지정 trash
했으며 처음으로 작동하여 Finder 윈도우에서 파일을 클릭하는 것보다 훨씬 많은 파일을 더 효율적으로 휴지통에 넣을 수 있었습니다. 감사합니다. 더 많은 답변을 게시하기를 바랍니다.
osascript
. 파일이 존재하지 않을 때 발생하는 오류 아름답 지 않기 때문에 그 부분을 조정하고 싶을 수도 있습니다.
rm
파일이 존재하지 않을 때 메시지를 표시하는 측면에서 가능한 한 많이 쉘 명령을 모방하려고 시도 하며 (2) 모든 것을 단일 osascript
호출 로한데 모 읍니다 .
사용자의 배치 프로필 끝에 추가 할 수 있고 rm
파일이 실행될 때마다 파일을 휴지통으로 이동 시키는 꽤 좋은 코드를 발견했습니다 .
나노 ~ / .bash_profile
#... append at the end
function rm () {
local path
for path in "$@"; do
# ignore any arguments
if [[ "$path" = -* ]]; then :
else
# remove trailing slash
local mindtrailingslash=${path%/}
# remove preceding directory path
local dst=${mindtrailingslash##*/}
# append the time if necessary
while [ -e ~/.Trash/"$dst" ]; do
dst="`expr "$dst" : '\(.*\)\.[^.]*'` `date +%H-%M-%S`.`expr "$dst" : '.*\.\([^.]*\)'`"
done
mv "$path" ~/.Trash/"$dst"
fi
done
}
출처 : http://hints.macworld.com/article.php?story=20080224175659423
local dst=${path##*/}
에 local dst=${mindtrailingslash##*/}
그냥 말한다 일 전에 다른 라인을 삽입 local mindtrailingslash=${path%/}
. ② 나는 이름을 사용한다 function rr
. 이와 같이 plain rm
과는 관련이 없지만 이름은 짧고 입력하기가 빠릅니다 (다른 이름은 가능).
rm()
에 rmt()
여전히 사용할 수있는이 방법 - rm
당신이 원하는 경우 명령을 사용합니다. I는 내 머리에 RMT 생각 remove to trash
D :
AppleScript 인터프리터 인 터미널 명령 osascript를 사용하십시오.
osascript -e "tell application \"Finder\" to delete POSIX file \"${PWD}/${InputFile}\""
이것은 AppleScript에게 파인더에게 파일을 휴지통으로 보내도록 지시합니다.
AppleScript가 잘 처리하지 못하므로 상대 파일 경로에 PWD가 필요합니다.
스위프트를 이용한 현대적인 접근
https://github.com/reklis/recycle
//
// main.swift
// recycle
//
// usage: recycle <files or directories to throw out>
//
import Foundation
import AppKit
var args = NSProcessInfo.processInfo().arguments
args.removeAtIndex(0) // first item in list is the program itself
var w = NSWorkspace.sharedWorkspace()
var fm = NSFileManager.defaultManager()
for arg in args {
let path = arg.stringByStandardizingPath;
let file = path.lastPathComponent
let source = path.stringByDeletingLastPathComponent
w.performFileOperation(NSWorkspaceRecycleOperation,
source:source,
destination: "",
files: [file],
tag: nil)
}
rm
파일을 제거하는 대신 휴지통으로 파일을 이동할 수는 있지만 그래픽 사용자 인터페이스의 안전망의 사고 방식을 UNIX 셸로 가져 오는 것을 권장하지 않습니다. 터미널을 사용하여 심각한 손상을 입히는 방법에는 여러 가지가 있습니다. IMHO에게 가장 좋은 조언 enter은 쉘 창에서 키를 누르기 전에 단순히 두 번 생각하는 것 입니다.
rm
파일을 삭제 하려고 한다는 것을 상기 시키려면 다음 별명을 사용하는 것이 좋습니다 ( 홈 디렉토리 /bin/bash
에이 행 을 넣는 경우 .bashrc
).
alias rm "rm -i"
이 것 rm
제거하기 전에 요청 확인을 각 파일을.
TimeMachine을 실행중인 경우 (그렇기를 바랍니다) 항상 백업에서 파일을 가져올 수 있습니다. 이 방법으로 최대 1 시간의 작업을 잃을 수 있습니다. 물론 나쁘다. 그 enter키 를 누르기 전에 다시 생각하십시오 !
rm
별명을 사용 하고 정지 시킬 수 있습니다 rm -i
.
rm
다른 시스템에서 문제를 일으킬 수있는 것보다 안전한 뇌를 훈련 시킨다는 것 입니다. 또한를 사용 -f
하면 -i
완전히 무시됩니다. 즉, 이것은 좋은 안전망입니다. 더 좋은 방법 rm
은 rmi
별칭 ( alias rmi="rm -i"
)이나 뛰어난 trash
유틸리티 를 위해 사용하지 않는 것 입니다 . 또한 지금까지 모든 사람이 [ -f ~/.bashrc ] && source ~/.bashrc
자신의 의견 .bash_profile
을 제시해야한다고 덧붙 입니다 .
Homebrew 를 통해 설치 가능한 유틸리티는 두 가지 가 있습니다.
파일이나 폴더를 휴지통으로 옮기는 OS X 용 작은 명령 줄 프로그램입니다. 이 명령의 USP는 파일을 쉽게 복원 할 수 있도록하는 것입니다. 파일 / 폴더를 휴지통에 버리기 명령은 파일 / 폴더를 휴지통에 넣은 후에 복원 할 수 없으면 사용되지 않습니다. 명령 웹 사이트에서 :
기본적으로 trash는 Finder를 통해 파일을 휴지통에 넣을 때만 작동하는 "뒤로"기능으로 인해 시스템 API를 호출하는 대신 지정된 파일 / 폴더를 휴지통으로 이동하도록 Finder에 요청합니다.
-에프
시스템 API를 사용하는 대신 Finder에 파일을 휴지통으로 이동하도록 요청하십시오. 속도는 느리지 만 Finder의 UI (예 : 소리)를 활용하고 "뒤로"기능이 작동하도록합니다.
-엘
현재 휴지통에있는 항목을 나열하십시오. 이 인수를 사용하면 파일을 지정할 필요가 없습니다.
-이자형
쓰레기통을 비워. 휴지통은이 작업을 실행하기 전에 확인을 요청합니다. 이 인수를 사용하면 파일을 지정할 필요가 없습니다.
설치하려면 trash
터미널에서 다음을 실행하십시오.
brew install trash
.
파일을 휴지통으로 옮기는 명령 줄 도구입니다. 명령의 매뉴얼 페이지에서 :
이 명령은 파일을 파일 시스템에서 완전히 제거하지 않고 휴지통으로 이동합니다. 결국 그 파일을 원한다면 매우 유용합니다 ...
-u USERNAME
선택적 인수 파일을 지정된 사용자의 휴지통으로 이동합니다. 이를 수행하려면 충분한 권한이 필요합니다.
설치하려면 rmtrash
터미널에서 다음을 실행하십시오.
brew install rmtrash
.
bash 프로파일에 추가하는 아주 간단한 단선 솔루션입니다. 휴지통에 이미 같은 이름의 것을 덮어 쓰게됩니다.
trash() { mv -fv "$@" ~/.Trash/ ; }
용법:
• ~/Desktop $$$ touch a b c
• ~/Desktop $$$ ls
a b c
• ~/Desktop $$$ trash a b c
a -> /Users/ryan.tuck/.Trash/a
b -> /Users/ryan.tuck/.Trash/b
c -> /Users/ryan.tuck/.Trash/c
• ~/Desktop $$$ ls
• ~/Desktop $$$
.bashrc (또는 셸의 매개 변수를 유지하는 곳)에서 다음과 같이 rm의 동작을 ~ / .Trash로 옮기는 동작을 변경하는 별칭을 추가하십시오.
alias rm='move/to/.Trash'
mv (이 직업에 사용할 주요 후보자)의 사용은 다음과 같기 때문에 (적어도 나에게는) 구현하기가 쉽지는 않습니다.
mv file where
따라서 이동 될 파일 앞에 'where'부분을 넣는 별명을 갖는 것은 꽤 스케치적일 수 있습니다. 좀 더 실질적인 조언을 얻을 수있을 것입니다.
편집 : 방금 .bashrc에 다음을 추가하려고 시도했지만 작동합니다.
function trash { mv "$@" ~/.Trash ; }
다른 제안보다 훨씬 원시적이지만 새로운 것을 설치하지 마십시오.
rm
설치 프로그램 스크립트를 손상시킬 수 있으므로 무엇이든 앨리어싱 하는 것은 위험합니다. 별명 rm
을 지정 rm -i
하고 설치를 중단 했을 때 어려운 방법을 배웠습니다 .
.bashrc
는 대화식 쉘 에만 사용됩니다 . ./install.sh
새 프로세스 를 실행 하면 별명이 활성화 되지 않습니다 . 그러나 . install.sh
현재 프로세스를 실행하면 설치 관리자가 실행되고 별칭이 활성화됩니다. RTFM ...
rm
있기 때문 rm
입니다. 또한 파일을 휴지통으로 옮기는 것만 큼 간단 하지 않습니다mv {} ~/.Trash
. 예를 들어 파일이 별도의 볼륨에 있으면 파일을 홈 디렉토리에 복사 하고 원본을 삭제합니다.
나는 단순히이 스크립트를 넣었다
#!/bin/bash
application=$(basename "$0")
if [ "$#" == 0 ]; then
echo "Usage: $application path [paths...]"
exit 1
fi
trashdir="/Users/${USER}/.Trash"
while (( "$#" )); do
if [ -e "$1" ]; then
src=$(basename "$1")
dst=$src
while [ -e "$trashdir/$dst" ]; do
dst=$src+`date +%H-%M-%S`
done
mv -f "$1" "$trashdir/$dst"
else
echo "$1" does not exist.
fi
shift
done
에서 실행 가능 ~/bin/trash
하게 만들고 chmod +x ~/bin/trash
다음 줄을 추가했습니다.~/.bash_profile
PATH=$PATH:$HOME/bin
그런 다음 사용할 수 있습니다
$ trash broken.js olddir cleanup.*
간단한 기능을 사용하면 파일을 사용자의 .Trash 폴더로 이동하여 파일을 휴지통으로 옮길 수 있습니다.
trash() {
mv $1 ~/.Trash
}
$*
대신에 필요할 수도 있지만와 $1
같은 대답으로 끝날 것입니다 mv "$@" ~/.Trash
. 사람들이 부정적으로 투표하는 이유는 다른 답변의 의견을 확인하십시오.