Как переместить файлы в корзину из командной строки?

Я много работаю над терминалом, и сегодня у меня был опыт ввода

rm fileInQuestion.txt

Прежде чем выяснять, что мне действительно нужен файлInQuestion.txt. Если бы я удалил в графическом интерфейсе, я бы просто извлек его из корзины. Я хотел бы знать, возможно ли перегружать 'rm' в Терминале таким образом, что он отправляет файл /файлы в Trash на выходе.

105 голосов | спросил Joe 9 Maypm12 2012, 18:34:39

12 ответов


91

Я бы не советовал aliasing rm на mv, так как вы могли бы привыкнуть к rm, не навсегда удаляя файлы, а затем запускать проблемы на других компьютерах или под другими учетными записями пользователей, когда он делает навсегда.

Я написал набор сценариев bash, которые добавляют дополнительные средства командной строки для Mac OS X (в дополнение к числу встроенных, таких как open), pbcopy, pbpaste и т. д.), что наиболее важно trash. Моя версия trash будет делать все правильные вещи, которые не будут сглаживаться rm (и, надеюсь, ничего плохого, но я использовал его на своих Mac для нескольких лет без потери данных), в том числе: переименование файла, такого как Finder, если файл с тем же именем уже существует, поместив файлы в правильную папку Trash на внешние тома; он также имеет некоторые добавленные тонкости, такие как: он пытается использовать AppleScript, когда он доступен, поэтому вы получаете хороший звук мусора и т. д. (но не требует его, чтобы вы все еще могли использовать его через SSH, когда ни один пользователь не вошел в систему), он может укажите размер корзины на всех томах.

Вы можете захватить мой набор инструментов-osx с моего сайта или самую последнюю версию из репозиторий GitHub .

Существует также команда trash, разработанная Ali Rantakari , но я не тестировал ее сам .

ответил morgant 9 Maypm12 2012, 19:21:56
65

Инструмент командной строки trash может быть установлен через brew install trash.

Он позволяет восстанавливать файлы с повреждением через командную строку или Finder.

ответил Paul Wenzel 16 FebruaryEurope/MoscowbMon, 16 Feb 2015 06:47:06 +0300000000amMon, 16 Feb 2015 06:47:06 +030015 2015, 06:47:06
12

У меня есть исполняемый код rem где-то в моем $PATH со следующим содержимым:

#!/usr/bin/env python
import os
import sys
if len(sys.argv) > 1:
    for arg in sys.argv[1:]:
        if os.path.exists(arg):
            os.system('osascript -e \'tell app "Finder" '
                      + 'to move the POSIX file "'
                      + os.path.abspath(arg) + '" to trash\'')
        else:
            print "Error:", os.path.abspath(arg), "does not exist"
else:
    print "usage: rem file(s)"
    print "       move file(s) to Trash"

Он ведет себя точно так же, как удаление из Finder. (См. Сообщение в блоге

ответил Anthony Smith 17 WedEurope/Moscow2014-12-17T17:58:33+03:00Europe/Moscow12bEurope/MoscowWed, 17 Dec 2014 17:58:33 +0300 2014, 17:58:33
4

Я нашел довольно приятный код, который можно добавить в конце пользовательского пакетного профиля и заставляет rm перемещать файлы в корзину каждый раз, когда он запускается.

nano ~ /.bash_profile

#... append at the end
function rm () {
  local path
  for path in "[email protected]"; 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

ответил rraallvv 16 Jpm1000000pmWed, 16 Jan 2013 20:19:57 +040013 2013, 20:19:57
2

Используйте команду терминала osascript, интерпретатор AppleScript.

osascript -e "tell application \"Finder\" to delete POSIX file \"${PWD}/${InputFile}\""

Это говорит AppleScript, чтобы сообщить Finder отправить файл в корзину.

PWD необходим для относительных путей к файлу, поскольку AppleScript не справляется с этим.

ответил cde 25 MonEurope/Moscow2017-12-25T11:12:58+03:00Europe/Moscow12bEurope/MoscowMon, 25 Dec 2017 11:12:58 +0300 2017, 11:12:58
1

современный подход с использованием быстрого

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)
}
ответил slf 20 MaramFri, 20 Mar 2015 07:41:37 +03002015-03-20T07:41:37+03:0007 2015, 07:41:37
1

Хотя можно сделать rm перемещение файлов в Корзину вместо их удаления, я бы посоветовал не доводить мышление системы безопасности графических пользовательских интерфейсов до оболочки UNIX. Существует много способов нанесения серьезного ущерба с помощью терминала. Лучшим советом IMHO является просто подумать дважды, прежде чем нажать клавишу enter в окне оболочки.

Если вы хотите, чтобы rm напоминал вам, что вы собираетесь удалить файл, используйте следующий псевдоним (для /bin/bash введите эту строку в .bashrc в вашем домашнем каталоге):

alias rm "rm -i"

Это приведет к подтверждению запроса rm, прежде чем пытаться удалить файл each .

Если у вас работает TimeMachine (надеюсь, так!), вы всегда можете получить свой файл из резервной копии. Таким образом, вы можете потерять не более одного часа работы. Конечно, это плохо. Поэтому подумайте еще раз, прежде чем нажимать клавишу enter !

ответил Mackie Messer 10 Mayam12 2012, 00:21:23
0

Правильно уничтожающий материал (так что он определенно восстанавливается) сложнее, чем просто mv до ~/.Trash.

osx-trash может быть тем, что вы ищете. ( Caveat emptor - я не пробовал и не могу ручаться за то, насколько он безопасен.)

ответил Nix 9 Maypm12 2012, 18:54:16
0

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

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

$ npm install --global trash-cli

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

ответил Sindre Sorhus 31 +03002015-10-31T13:26:11+03:00312015bEurope/MoscowSat, 31 Oct 2015 13:26:11 +0300 2015, 13:26:11
-1

В вашем .bashrc (или где бы вы не сохранили параметры для своей оболочки) попробуйте добавить псевдоним, который изменяет поведение rm для перемещения материала на ~ /.Trash, как в:

alias rm='move/to/.Trash'

Этот псевдоним, если он не является тривиальным для реализации (хотя бы для меня), потому что использование mv (основного кандидата для использования для этого задания) -

mv file where

, поэтому наличие псевдонима, который помещает часть «где» перед перемещаемым файлом, может быть довольно отрывочным. Я рассмотрю это, чтобы получить более существенные советы.

EDIT: я просто попытался добавить следующее в мой .bashrc, и он работает:

function trash { mv "[email protected]" ~/.Trash ; }

Это намного примитивнее других предложений, но вы не устанавливаете новые вещи.

ответил user1256923 9 Maypm12 2012, 18:49:00
-1

Я просто поставил этот скрипт

#!/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, сделал его excutable chmod +x ~/bin/trash и добавил следующую строку в ~/.bash_profile

PATH=$PATH:$HOME/bin

Тогда его можно использовать как

$ trash broken.js olddir cleanup.*
ответил J P 17 MarpmTue, 17 Mar 2015 15:14:08 +03002015-03-17T15:14:08+03:0003 2015, 15:14:08
-2

Простая функция может позволить вам удалять файлы, перемещая их в пользовательскую папку .Trash:

trash() {
   mv $1 ~/.Trash
}
ответил james.kobol 8 J000000Monday13 2013, 20:31:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132