195 votes

Comment déplacer des fichiers vers la corbeille à partir de la ligne de commande ?

Je travaille beaucoup sur des terminaux, et aujourd'hui j'ai eu l'expérience de taper

rm fileInQuestion.txt

Avant de découvrir que j'avais vraiment besoin de fileInQuestion.txt. Si j'avais supprimé dans l'interface graphique, je l'aurais simplement sorti de la corbeille. J'aimerais savoir s'il est possible de surcharger 'rm' dans le terminal de manière à ce qu'il envoie le(s) fichier(s) à la Corbeille lors de sa sortie.

169voto

Paul Wenzel Points 1491

Le site poubelle peut être installé via l'outil de ligne de commande brew install trash .

Il vous permet de restaurer les fichiers mis à la corbeille via la ligne de commande ou le Finder.

134voto

Jim Puls Points 29289

Je ne conseillerais pas l'aliasing rm a mv comme vous pourriez prendre l'habitude de rm de ne pas supprimer définitivement des fichiers, puis de rencontrer des problèmes sur d'autres ordinateurs ou sous d'autres comptes d'utilisateur lorsqu'elle fait supprimer définitivement.

J'ai écrit une série de bash scripts qui ajoutent des outils de ligne de commande de type Mac OS X (en plus d'un certain nombre d'outils intégrés tels que open , pbcopy , pbpaste etc.), et surtout trash . Ma version de trash fera toutes les choses correctes que l'aliasing rm (et j'espère qu'il n'y a rien de mal, mais je l'utilise sur mes propres Macs depuis quelques années maintenant sans aucune perte de données), y compris : renommer le fichier comme le Finder le fait si un fichier avec le même nom existe déjà, mettre les fichiers dans le bon dossier Trash sur les volumes externes ; il a également quelques fonctionnalités supplémentaires, comme : il tente d'utiliser AppleScript lorsqu'il est disponible afin que vous obteniez le joli son de la corbeille et autres (mais ne l'exige pas afin que vous puissiez toujours l'utiliser via SSH quand aucun utilisateur n'est connecté), il peut vous donner la taille de la corbeille sur tous les volumes.

Vous pouvez prendre mon la suite tools-osx de mon site ou la dernière et meilleure version de le dépôt GitHub .

Il y a aussi a trash commande développée par Ali Rantakari mais je ne l'ai pas testé moi-même.

34voto

Anthony Smith Points 379

J'ai un exécutable appelé rem quelque part dans mon $PATH avec le contenu suivant :

EDIT : le code ci-dessous est un version révisée et améliorée en collaboration avec Dave Abrahams :

#!/usr/bin/env python
import os
import sys
import subprocess

if len(sys.argv) > 1:
    files = []
    for arg in sys.argv[1:]:
        if os.path.exists(arg):
            p = os.path.abspath(arg).replace('\\', '\\\\').replace('"', '\\"')
            files.append('the POSIX file "' + p + '"')
        else:
            sys.stderr.write(
                "%s: %s: No such file or directory\n" % (sys.argv[0], arg))
    if len(files) > 0:
        cmd = ['osascript', '-e',
               'tell app "Finder" to move {' + ', '.join(files) + '} to trash']
        r = subprocess.call(cmd, stdout=open(os.devnull, 'w'))
        sys.exit(r if len(files) == len(sys.argv[1:]) else 1)
else:
    sys.stderr.write(
        'usage: %s file(s)\n'
        '       move file(s) to Trash\n' % os.path.basename(sys.argv[0]))
    sys.exit(64) # matches what rm does on my system

Il se comporte exactement de la même manière que la suppression à partir du Finder. (Voir l'article de blog aquí .)

23voto

cde Points 581

Utilisez la commande terminal osascript, l'interpréteur AppleScript.

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

Ceci indique à AppleScript de dire au Finder d'envoyer le fichier à la corbeille.

PWD est nécessaire pour les chemins de fichiers relatifs, car AppleScript ne le gère pas bien.

9voto

slf Points 339

Une approche moderne utilisant swift

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)
}

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X