从终端将文件移动到Snow Leopard上的垃圾箱


13

Snow Leopard允许用户“回退”从Finder移至“废纸rash”的文件。但是,当我mv <file> ~/.Trash从命令行执行操作时,没有得到“回退”选项。

Snow Leopard中是否有一个本机命令,可将文件移至垃圾箱,同时让我仍然可以“回退”?

Answers:


2

将文件移至回收站时,OS X会使用“回退”信息更新.DS_Store文件~/.Trash。(有关更多详细信息,请参见此问题

为了更新此.DS_Store文件,当您将文件移动到终端中的废纸。时,还必须更新文件。


谢谢。不是我所希望的,但这是事实。
马皮

9

我建议安装Ruby gem osx-trash

怎么样?

sudo gem install osx-trash

用法?

Usage: trash [OPTIONS] <file> [<file> ...]
       trash [-e | --empty]
       trash [-l | --list]
Specific options:
    -e, --empty                      Empty the trash
    -l, --list                       List items in the trash
    -h, --help                       Show this message
    -v, --version                    Show version

Manipulate to the Finder's trash.

2
真好!但是,当它与Finder通信时,使用通配符删除文件会为每个文件播放删除声音。
JariKeinänen2011年

1
我认为这仍然行不通。从文档:osx-trash需要Mac OS X 10.5,Leopard。我尝试了一下,然后得到的是bash: trash: command not found
yourfriendzak

在OS X 10.9行不通被问及如何解决它在这里一个新的问题superuser.com/questions/694433/...
simbo1905

2

在MacOSX SDK中,有功能FSPathMoveObjectToTrashSync和相关功能。在其周围编写Python(或其他任何东西)脚本应该很容易。

编辑:刚刚编码。可以在这里找到:rm-trash.py


仅供参考-FSPathMoveObjectToTrashSync在10.8中已弃用,根据该文档,您将需要使用trashItemAtURL:resultingItemURL:error:代替。
Lester Cheung

2

您需要rmtrash程序。

您可以使用它来向垃圾箱添加项目,就像在查找程序中完成的一样。

编辑:我只是尝试使用rmtrash删除和恢复。它的工作原理与从查找器中删除完全相同。文件显示在“垃圾箱”中,可以完全一样地拖出和清空。从'06左右开始使用它。


从rmtrash的代码看,它等效于mv file ~/.Trash/。您确定可以从此工具恢复文件吗?
艾伯特

0

在查看了替代方案之后,我发现:

  • rmtrash程序无需使用系统API即可将文件移至垃圾桶目录,因此.DS_Store文件不会被更新。另外,不会触发回收音。
  • python脚本在山狮上调用了不赞成使用的方法,该方法也不会触发回收声音。
  • ruby脚本可以工作,但是可以使用sloooooow(就像python一样)。

因此,我编写了自己的Nimrod编程语言实现的垃圾命令,因此它速度很快,并且在后台进程中触发了垃圾桶声音。这意味着键入命令并运行它会立即退出,因为它不需要等待声音播放。缺点是您需要先编译nimrod然后再编译该程序(没有二进制对不起!)。

PS:说实话,最好的实现是使用我从Nimrod使用的官方API来实现rmtrash,这是简单的Objective-c



-1

我今天遇到了同样的问题,并检查了上面给出的rmtrash程序。不幸的是,到目前为止,所有可见的解决方案都将文件移动到主目录的.Trash。

另一方面,Finder会根据文件的文件系统的挂载点将其移动到其他-Trash文件夹中。

因此,我能想到的最简单的解决方案(创建于10.5.8。要在较新版本的OS X上进行测试)是:

osascript -e 'tell application "Finder" to delete POSIX file "'FULL FILENAME HERE'"'

这是我为此创建的shell脚本:

#!/bin/bash
declare -a files
for f in "$@" ; do
    if [ -r "$f" ] ; then
        case "$f" in
        /*) ;;
        *) f="$( pwd )/$f" ;;
        esac
        files=("${files[@]}" "$f")
    else
        echo "Can't find '$f'" >&2
    fi
done
if [ ${#files[@]} -gt 0 ] ; then
    osascript -e '
    on run argv
        repeat with f in argv
            set x to (POSIX file f) as string
            tell application "Finder" to delete x
        end
    end
    ' "${files[@]}" > /dev/null
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.