2010-11-11 8 views
1

J'ai écrit un script shell vary basic qui déplace un fichier spécifié dans le répertoire dustbin. Le script est le suivant:Linux - Restauration d'un fichier

#!/bin/bash 
#move items to dustbin directory 
mv "[email protected]" ~/dustbin/ 
echo "File moved to dustbin" 

Cela fonctionne très bien pour moi, tout fichier que je spécifie est déplacé dans le répertoire de la poubelle. Cependant, ce que je voudrais faire est de créer un nouveau script qui ramènera le fichier dans le répertoire de la poubelle dans son répertoire d'origine. Je sais que je pourrais facilement écrire un script qui le ramènerait à un emplacement spécifié par l'utilisateur, mais je préférerais en avoir un qui le déplacerait dans son répertoire d'origine.

Est-ce possible?

J'utilise Mac OS X 10.6.4 et Terminal

Répondre

3

Vous devrez stocker où le fichier d'origine vient alors. Peut-être dans un fichier séparé, une base de données, ou dans les attributs de fichiers (métadonnées).

Créer un fichier journal avec 2 colonnes:

  1. Le nom de fichier complet dans la poubelle
  2. Le chemin complet d'origine et le nom

Vous aurez besoin de ce fichier journal de toute façon - que ferez-vous quand un utilisateur a supprimé 2 fichiers dans des répertoires différents, mais avec le même nom? /home/user/.wgetrc et /home/user/old/.wgetrc? Que va-t-il faire lorsqu'un utilisateur supprime un fichier, en crée un nouveau avec le même nom, puis le supprime également?

Vous aurez besoin de versions ou d'horodatages ou de quelque chose.

1

Vous devez stocker l'emplacement d'origine quelque part, dans une base de données ou dans un attribut étendu du fichier. Une base de données est certainement le moyen le plus simple de le faire, même si un attribut étendu serait plus robuste. En regardant dans ~/.Trash/je vois certains, mais pas tous les fichiers ont des attributs étendus, donc je ne suis pas sûr de savoir comment Apple le fait.

+0

J'aime vraiment l'idée des attributs étendus :) –

1

Vous devez d'une manière ou d'une autre encoder le répertoire source dans le fichier. Je pense que le plus simple serait de changer le nom de fichier dans le répertoire de la poubelle. Alors que /home/user/music/song.mp3 devient ~/poubelle/song.mp3 | home_user_music

Et lorsque vous copiez votre script en arrière doit traiter le nom du fichier et construire le chemin en commençant à |.

+0

Je pense que la création d'une base de données comme d'autres proposée est beaucoup pour bash. Si vous allez faire cela, changez de langue. – problemofficer

+0

Le problème ici est que vos noms de fichiers ont déjà '' '' dans eux. Vous pouvez résoudre cela en remplaçant '|' dans le nom de fichier original par '||' (et en l'inversant lorsque vous le restaurez), car vous ne pouvez pas avoir un nom de répertoire vide dans un chemin. – caf

1

Une autre approche consisterait à laisser le système de fichiers être votre base de données.

Un fichier déplacé de /some/directory/somewhere/filename serait déplacé à ~/dustbin/some/directory/somewhere/filename et vous feriez find ~/dustbin -name "$file" de le trouver en fonction de son nom de base (de l'entrée de l'utilisateur). Ensuite, vous devriez couper "~/bustbin" de la sortie de find et vous auriez la destination prête à l'emploi. Si plus d'un fichier est renvoyé par find, vous pouvez répertorier les fichiers proposés pour la sélection de l'utilisateur. Vous pouvez utiliser ~/dustbin/$deletiondate si vous voulez permettre de revenir à des versions antérieures.

Vous pouvez effectuer un travail cron qui supprime périodiquement les anciens fichiers et les répertoires (s'ils sont vides).