14

Snow Leopard позволяет пользователям "положить обратно" файлы, которые были перемещены в корзину из Finder. Тем не менее, когда я делаю mv <file> ~/.Trash из командной строки Я не получаю опцию "Поставить обратно".

Есть ли в Snow Leopard встроенная команда, которая перемещает файл в корзину, позволяя мне по-прежнему использовать команду "Вернуть назад"?

7 ответов7

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

Вы хотите программу rmtrash .

Вы можете использовать его для добавления элементов в корзину, как если бы это было сделано в Finder.

Изменить: я только что попытался использовать rmtrash для удаления и восстановления. Это работает так же, как удаление из поиска. Файлы отображаются в корзине, могут быть вытащены и очищены точно так же. Использую его с 06 года или около того.

2

В MacOSX SDK есть функции FSPathMoveObjectToTrashSync и связанные с ними. Должно быть легко написать сценарий Python (или любой другой) вокруг него.

Изменить: Просто закодировал это. Можно найти здесь: rm-trash.py.

2

При перемещении файла в корзину OS X обновляет .DS_Store внутри ~/.Trash с информацией "Положи обратно". (Смотрите этот вопрос для более подробной информации)

Чтобы обновить это, вам также необходимо обновить .DS_Store при перемещении файла в корзину в Терминале.

0

Посмотрев на альтернативы, я обнаружил, что:

  • Программа rmtrash перемещает файлы в каталог корзины без использования системного API, поэтому .Файл DS_Store не будет обновлен. Кроме того, не запускает звук перезапуска.
  • Скрипт python вызывает устаревший метод на горном льве, который также не запускает звук перезапуска.
  • Сценарий ruby работает, но имеет значение sloooooow (как и сценарий python).

Поэтому я написал свою собственную команду для мусора, реализованную на языке программирования Nimrod, поэтому она работает быстро и запускает звук мусорного бака в фоновом режиме. Это означает, что ввод команды и ее выполнение немедленно завершаются, так как не нужно ждать воспроизведения звука. Дело в том, что вам нужно скомпилировать nimrod, а затем эту программу (без двоичного кода, извините!).

PS: Честно говоря, лучшая реализация была бы для rmtrash с использованием официального API, который я использую от Nimrod, что является простой целью -c.

0

Проверьте trash-cli. Он работает кроссплатформенный, без мусора и поддерживает Put Back.

Вы можете установить его с помощью (требуется Node.js):

$ npm install --global trash-cli

В качестве альтернативы, если вы не хотите использовать Node.js, вы можете установить собственный двоичный файл osx-trash вручную.

-1

У меня была такая же проблема сегодня, и я проверил также программу rmtrash, приведенную выше. К сожалению, все найденные решения перемещают файлы в домашний каталог.Корзина.

С другой стороны, Finder перемещает его в разные папки -Trash в зависимости от точки монтирования файловой системы файла.

Так что самое простое решение, которое я могу придумать (создано на 10.5.8. Быть проверенным на более новых версиях OS X) это:

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

Вот сценарий оболочки, который я создал для него:

#!/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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .