我做了很多终端工作,今天有打字的经验
rm fileInQuestion.txt
在发现我确实需要fileInQuestion.txt之前。如果我在GUI中删除了它,那我将把它从垃圾箱中删除。我想知道是否有可能在终端中过载“ rm”,从而在出站时将文件发送到垃圾箱。
我做了很多终端工作,今天有打字的经验
rm fileInQuestion.txt
在发现我确实需要fileInQuestion.txt之前。如果我在GUI中删除了它,那我将把它从垃圾箱中删除。我想知道是否有可能在终端中过载“ rm”,从而在出站时将文件发送到垃圾箱。
Answers:
我不会建议别名rm
来mv
,你可能会在习惯得到rm
不永久删除文件,然后运行到其他计算机上或下的其他用户帐户时,它的问题不永久删除。
我写了一组bash
是(多项内置者的除了像添加更多的Mac OS X样的命令行工具脚本open
,pbcopy
,pbpaste
等),最重要的trash
。我的版本trash
将执行别名rm
不会发生的所有正确操作(希望没什么不好,但是几年来我一直在自己的Mac上使用它,而不会丢失任何数据),包括:重命名文件,就像Finder一样。如果已经存在同名文件,则将文件放在外部卷上正确的“废纸folder”文件夹中;它还具有一些附加的优点,例如:它尝试在可用时尝试使用AppleScript,以便获得不错的垃圾声音(例如,但不需要它,因此在没有用户登录时仍可以通过SSH使用它),它可以为您提供所有卷中的废纸size大小。
您可以从我的网站上获取我的tools-osx套件,或者从GitHub存储库中获取最新最好的版本。
还有一个trash
由Ali Rantakari开发的命令,但是我自己还没有测试过。
trash
被Rantakari使用了很长时间,并且可以为其提供担保。它是由Objective-C编译的,并且巧妙地使用标准文件系统API,并且如果失败(即用户没有足够的权限),它将调用Finder来丢弃文件(有效地提示进行身份验证)。您可以trash
从hasseg.org/blog阅读更多信息。
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
在每次运行时将文件移至垃圾箱。
纳米〜/ .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
需要时使用命令。我认为rmt是remove to trash
:D
使用终端命令osascript,AppleScript解释器。
osascript -e "tell application \"Finder\" to delete POSIX file \"${PWD}/${InputFile}\""
这告诉AppleScript告诉Finder将文件发送到垃圾箱。
相对文件路径需要PWD,因为AppleScript处理得不好。
快速的现代方法
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
移动文件替换为“废纸rash”而不是删除它们,但我建议不要将图形用户界面安全网的思想带入UNIX Shell。有很多方法可以使用终端进行严重损坏。恕我直言,最好的建议是在击中entershell窗口中的键之前,请三思而后行。
如果要rm
提醒您即将删除文件,请考虑使用以下别名(/bin/bash
将此行.bashrc
放入您的主目录中):
alias rm "rm -i"
这将rm
在尝试删除每个文件之前进行请求确认。
如果您正在运行TimeMachine(希望如此!),则始终可以从备份中获取文件。这样,您最多只能损失一个小时的工作。当然,这已经够糟糕了。因此,在按下该enter键之前,请三思!
rm
别名并挂起rm -i
。
.bashrc
仅在外壳为交互式时才执行。检查手册页!
rm
比现在更安全,这会使您在其他系统上遇到麻烦。另外,如果你使用-f
,-i
完全被忽略。也就是说,这是一个很好的安全网。一个更好的是不要使用rm
赞成的rmi
别名(alias rmi="rm -i"
)或优秀的trash
工具。另外,我要补充的是每个人都应该把[ -f ~/.bashrc ] && source ~/.bashrc
他们的.bash_profile
现在。
可以通过Homebrew安装两个实用程序来完成此任务:
这是OS X的小型命令行程序,可将文件或文件夹移至回收站。此命令的USP可以轻松还原文件。如果您在删除文件/文件夹后无法恢复文件/文件夹,则该命令将无效。在命令的网站上:
默认情况下,由于要求仅在通过Finder删除文件时起作用的“回送”功能,trash会要求Finder将指定的文件/文件夹移动到垃圾桶中,而不是调用系统API来执行此操作。
-F
要求Finder将文件移至回收站,而不要使用系统API。这比较慢,但是它利用Finder的UI(例如声音)并确保“回送”功能有效。
-l
列出垃圾箱中当前的项目。如果使用此参数,则无需指定文件。
-e
清空垃圾。垃圾桶在执行此操作之前要求确认。如果使用此参数,则无需指定文件。
要安装trash
,请在终端中运行以下命令:
brew install trash
。
将文件移至垃圾箱的命令行工具。在命令的手册页中:
此命令将文件移至垃圾桶,而不是将其从文件系统中完全删除。如果您最终决定要该文件,则非常有用...
-u用户名
可选参数。这会将文件移到指定用户的回收站。请注意,您需要足够的特权才能完成此操作。
要安装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中(或在任何保留shell参数的位置),尝试添加一个别名,该别名将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
命令,morgant说,因为你将成为舒适与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
。为什么人们对它投反对票,请检查其他答案的评论。