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.

4voto

ryantuck Points 199

Voici une solution assez triviale en une ligne à ajouter à votre profil bash. Notez que cela écrasera quelque chose avec le même nom déjà dans la corbeille.

trash() { mv -fv "$@" ~/.Trash/ ; }

Utilisation :

• ~/Desktop $$$ touch a b c
• ~/Desktop $$$ ls
a b c
• ~/Desktop $$$ trash a b c
a -> /Users/ryan.tuck/.Trash/a
b -> /Users/ryan.tuck/.Trash/b
c -> /Users/ryan.tuck/.Trash/c
• ~/Desktop $$$ ls
• ~/Desktop $$$

3voto

rraallvv Points 2030

J'ai trouvé un code assez sympa qui peut être ajouté à la fin du profil de lot de l'utilisateur et qui cause rm pour déplacer les fichiers vers la corbeille à chaque fois qu'il est exécuté.

nano ~/.bash_profile

#... append at the end
function rm () {
  local path
  for path in "$@"; 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
}

source : http://hints.macworld.com/article.php?story=20080224175659423

3voto

Odin Kroeger Points 31

Il s'agit d'une amélioration par rapport aux réponses données par Antony Smith y cde .

Le problème de l'intégration d'un nom de fichier dans une chaîne de caractères transmise à la fonction osascript via -e est que, sur les systèmes modernes de type Unix, les noms de fichiers peuvent contenir des guillemets, de sorte que certaines parties du nom de fichier peuvent être exécutées comme AppleScript.

Une façon plus sûre de procéder consiste à lire le nom du fichier à partir d'une variable d'environnement :

trash() (
    : "${1:?}"
    case $1 in
        (/*) FNAME="$1" ;;
        (*)  FNAME="$(pwd)/$1"
    esac
    export FNAME
    exec osascript <<-EOF >/dev/null
        set fName to system attribute "FNAME"
        tell application "Finder" to delete my (POSIX file fName)
    EOF
)

Si vous ajoutez cette fonction à votre .bashrc ou .zshrc vous pouvez appeler trash à partir de la ligne de commande. EDIT : Bien que transformer cette fonction en une fonction réellement utile nécessite plus de travail, bien sûr.

2voto

Nimesh Neema Points 44385

Il y a deux utilitaires qui peuvent être installés via Homebrew qui peut accomplir cela :

  1. poubelle

    Il s'agit d'un petit programme de ligne de commande pour OS X qui déplace des fichiers ou des dossiers vers la corbeille. L'avantage de cette commande est qu'elle permet de restaurer facilement les fichiers. Une commande pour mettre des fichiers/dossiers à la corbeille n'est d'aucune utilité si vous ne pouvez pas restaurer les fichiers/dossiers après les avoir mis à la corbeille. Extrait du site Web de la commande :

Par défaut, la corbeille demande au Finder de déplacer les fichiers/dossiers spécifiés vers la corbeille au lieu d'appeler l'API du système pour le faire, en raison de la fonction "put back" qui ne fonctionne que lorsque les fichiers sont mis à la corbeille par le Finder.

-F

Demandez au Finder de déplacer les fichiers vers la corbeille, au lieu d'utiliser l'API système. Cette méthode est plus lente, mais elle utilise l'interface utilisateur du Finder (par exemple, les sons) et garantit que la fonction "remettre à sa place" fonctionne.

-l

Liste des articles actuellement dans la poubelle. Si cet argument est utilisé, aucun fichier ne doit être spécifié.

-e

Vider la corbeille. La corbeille demande une confirmation avant d'exécuter cette action. Si cet argument est utilisé, aucun fichier ne doit être spécifié.

Pour installer trash exécutez ce qui suit dans le Terminal :

brew install trash .


  1. rmtrash

    Un outil en ligne de commande qui déplace les fichiers vers la corbeille. Extrait de la page de manuel de la commande :

Cette commande déplace les fichiers vers la corbeille plutôt que de les supprimer totalement du système de fichiers. Très utile si vous décidez que vous voulez ce fichier après tout...

-u USERNAME

un argument facultatif. Ceci déplacera le fichier dans la corbeille de l'utilisateur spécifié. Notez que vous devez disposer de privilèges suffisants pour réaliser cette opération.

Pour installer rmtrash exécutez ce qui suit dans le Terminal :

brew install rmtrash .

1voto

Luk Points 2602

Bien qu'il soit possible de faire rm déplacer les fichiers vers la Corbeille au lieu de les supprimer, je déconseille d'apporter l'état d'esprit du filet de sécurité des interfaces utilisateur graphiques au shell UNIX. Il existe de nombreuses façons de faire de sérieux dégâts en utilisant le terminal. Le meilleur conseil, à mon avis, est simplement de réfléchir à deux fois avant d'appuyer sur la touche enter dans une fenêtre du shell.

Si vous voulez rm pour vous rappeler que vous êtes sur le point d'effacer un fichier, envisagez d'utiliser l'alias suivant (pour /bin/bash mettez cette ligne dans .bashrc dans votre répertoire personnel) :

alias rm "rm -i"

Cela rendra rm chaque fichier.

Si vous avez TimeMachine (je l'espère !), vous pouvez toujours récupérer votre fichier à partir d'une sauvegarde. De cette façon, vous pouvez perdre au maximum une heure de travail. Ce qui est assez grave, bien sûr. Alors réfléchissez bien avant d'appuyer sur le bouton enter clé !

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