Déplacement multiplateforme vers la corbeille

Oct 25 2020

Existe-t-il un moyen multiplateforme de déplacer des fichiers vers la corbeille? file deletesupprime complètement le fichier et ne peut pas être annulé sous unixen. Même sous Linux seul, il n'est pas simple de trouver le répertoire de la corbeille car il dépend souvent du gestionnaire de fichiers.

J'ai recouru à faire:

exec gio trash $file

Le problème est que cela ne fonctionne que sur Gnome, donc même sous Linux, ce n'est pas multi-plateforme.

Et comme je n'ai pas de machine Windows, comprendre comment fonctionne la corbeille / corbeille sous Windows est encore plus difficile

Réponses

2 SchelteBron Oct 25 2020 at 16:18

La spécification FreeDesktop.org Trash dit:

Pour chaque utilisateur, un répertoire "home trash" DOIT être disponible. Son nom et son emplacement sont$XDG_DATA_HOME/Trash; $XDG_DATA_HOME est le répertoire de base des données spécifiques à l'utilisateur, tel que défini dans la spécification du répertoire de base du bureau.

Si $XDG_DATA_HOME is unset or empty, it defaults to $ACCUEIL / .local / partager.

Cependant, vous ne pouvez pas simplement déplacer des fichiers dans et hors de ~ / .local / share / Trash. Il existe des fichiers de métadonnées impliqués qui stockent l'emplacement d'origine et les horodatages. Ces fichiers de métadonnées sont en texte brut, ils peuvent donc être facilement manipulés dans Tcl.

Cela semble donc pouvoir être implémenté assez facilement dans un module Tcl. Mais si un tel module existe déjà, je n'en ai pas conscience. Cela pourrait être un beau projet pour quelqu'un qui apprend Tcl.

INFORMATIONS AJOUTÉES:

Comme d'habitude, TWAPI à la rescousse pour Windows. Le package twapi_shell a une recycle_filecommande.

2 DonalFellows Oct 25 2020 at 22:25

Voici comment procéder sur macOS. Cela nécessite le package d' extension Tclapplescript :

package require Tclapplescript

proc trash args {
    set TRASH_CMD {
        tell application "Finder" to delete POSIX file "%s"
    }
    foreach file $args { set fullFilename [file normalize $file]
        set quoted [string map {\\ \\\\ \\" \\\\"} $fullFilename] AppleScript execute [format $TRASH_CMD $quoted]
    }
}

Sur les versions récentes de macOS, vous devrez accorder les autorisations appropriées au moment de l'exécution pour que cela fonctionne (ou du moins je devais le faire lors du test).

Voir également:

  • https://apple.stackexchange.com/questions/50844/how-to-move-files-to-trash-from-command-line
  • Supprimer les fichiers avec AppleScript dans la corbeille ou définitivement