Переместить файл в корзину на Snow Leopard из терминала
Snow Leopard позволяет пользователям "положить обратно" файлы, которые были перемещены в корзину из Finder. Тем не менее, когда я делаю mv <file> ~/.Trash
из командной строки я не получаю опцию "положить обратно".
Есть ли в Snow Leopard встроенная команда, которая перемещает файл в корзину, позволяя мне по-прежнему использовать команду "Вернуть назад"?
7 ответов
Когда вы перемещаете файл в корзину, OS X обновляет .DS_Store
файл внутри ~/.Trash
с информацией "Вернуть". (Смотрите этот вопрос для более подробной информации)
Чтобы обновить это, вам также необходимо обновить .DS_Store
файл при перемещении файла в корзину в терминале.
Я рекомендую установить 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.
В MacOSX SDK есть функции FSPathMoveObjectToTrashSync
и связанные. Должно быть легко написать сценарий Python (или любой другой) вокруг него.
Изменить: Просто закодировал это. Можно найти здесь: rm-trash.py.
Вы хотите программу rmtrash.
Вы можете использовать его для добавления элементов в корзину, как если бы это было сделано в Finder.
Изменить: я только что попытался использовать rmtrash для удаления и восстановления. Это работает точно так же, как удаление из поиска. Файлы отображаются в корзине, могут быть вытащены и очищены точно так же. Использую его с 06 года или около того.
Проверять, выписываться trash-cli
, Он работает кроссплатформенный, без мусора и поддерживает Put Back.
Вы можете установить его с помощью (требуется Node.js):
$ npm install --global trash-cli
Кроме того, если вы не хотите использовать Node.js, вы можете установить собственный двоичный файл osx-trash
вручную.
Посмотрев на альтернативы, я обнаружил, что:
- Программа rmtrash перемещает файлы в каталог корзины без использования системного API, поэтому файл.DS_Store обновляться не будет. Кроме того, не запускает звук перезапуска.
- Скрипт python вызывает устаревший метод на горном льве, который также не запускает звук перезапуска.
- Сценарий ruby работает, но имеет значение sloooooow (как и python).
Поэтому я написал свою собственную команду мусора, реализованную на языке программирования Nimrod, поэтому она быстра и запускает звук мусорного бака в фоновом режиме. Это означает, что ввод команды и ее выполнение немедленно завершаются, так как не нужно ждать воспроизведения звука. Дело в том, что вам нужно скомпилировать nimrod, а затем эту программу (без двоичного кода, извините!).
PS: Честно говоря, лучшая реализация была бы для rmtrash с использованием официального API, который я использую от Nimrod, что является простой целью -c.
У меня была та же проблема сегодня, и я проверил также программу rmtrash, приведенную выше. К сожалению, все найденные решения перемещают файлы в.Trash домашнего каталога.
С другой стороны, 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