Перемістіть файл у смітник на сніговому леопарді з терміналу


13

Snow Leopard дозволяє користувачам "повернути" файли, переміщені в кошик із Finder. Однак, коли я виконую mv <file> ~/.Trashз командного рядка, я не отримую опцію "Повернути назад".

Чи є рідна команда у Snow Leopard, яка переміщує файл у кошик, дозволяючи мені все-таки мати можливість "Повернути назад"?

Відповіді:


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, передача файлів із символом підстановки відтворює звук для кожного файлу.
Jari Keinänen

1
Я не думаю, що це все ще працює. Від docs: 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 .


FYI - FSPathMoveObjectToTrashSync застарілий у 10.8, і згідно з документом вам потрібно буде використовувати trashItemAtURL: результуючіІtemURL: помилка: замість цього.
Лестер Чеун

2

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

Ви можете використовувати його для додавання елементів у кошик так, як якщо б це було зроблено у пошуку.

Редагувати: Я просто намагався використовувати rmtrash для видалення та відновлення. Це працює точно так само, як видалення з Finder. Файли, що з’являються у кошику, можна витягнути та видалити точно так само. Використовується з 2006 року або близько того.


З коду rmtrash, схоже, це просто рівнозначно mv file ~/.Trash/. Ви впевнені, що можете відновити файли з цього інструменту?
Альберт

0

Переглянувши альтернативи, я виявив, що:

  • Програма rmtrash переміщує файли до каталогу сміття без використання системного API, тому файл .DS_Store не буде оновлений . Крім того, не спрацьовує звук утилізації.
  • Сценарій python викликає застарілий метод на гірському леві, який також не викликає звук переробки.
  • Сценарій рубіну працює, але є sloooooow (як і пітон).

Тому я написав власну команду сміття, реалізовану мовою програмування 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, подану вище. На жаль, всі рішення, що бачилися зараз, переміщують файли до .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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.