2016-11-25 2 views
0

Ich habe 1 Skript erstellt, um benutzerdefinierte Dateien in den Mülleimer zu verschieben und eine Protokolldatei mit ihren ursprünglichen Pfaden erstellen. Jetzt möchte ich ein Skript erstellen, bei dem der Benutzer nur den Namen der Datei eingeben muss, um ihn an der Stelle wiederherzustellen, an der er zuvor war, und das kann ich nicht herausfinden. Hier ist der Code so weit:Wiederherstellen einer Datei an ihren ursprünglichen Speicherort aus einer Protokolldatei mit Pfaden

löschen Skript:

#!/bin/sh 
#checks if the user has entered anything. 
#if not displays message. 
if [ $# -eq 0 ]; then    #reads the number of characters 
     echo "Usage: del <pathname>" >&2 
     exit 2; 
fi 
#location of the dustbin 
dustbin="$HOME/dustbin" 
paths="$HOME/Paths" 
if [[ ! -d $dustbin ]]; then #checks if the dustbin exists 
mkdir $dustbin 
    else 
     [[ -p $dustbin ]]   #if dustbin exists does nothing 
fi 
#creates a Paths folder to store the original location of file(s) 
if [[ ! -d $paths ]]; then #checks if the Paths folder exists 
mkdir $paths 
    else 
     [[ -p $paths ]]   #if Paths folder exists does nothing 
fi 
#gets just the file name 
for file in "[email protected]"; do    #reads all the arguments 
    if [[ -e $file ]]; then   #checks if the file name exists 
#moves the file(s) to the dustbin and writes the orginal file path to the paths.txt file. 
find $file >> $HOME/Paths/paths.txt && mv "$file" "$dustbin" 
     echo "Deleting file(s) $file" 
    else 
     echo "The file $file doesn't exist." 
    fi 
done 

wiederherstellen Skript: Damit muss ich für die Datei in die Mülltonne suchen, auf den Pfaden Textdatei mit dem Dateinamen übereinstimmen, hat die Dateien ursprünglichen Pfad und bewegen Sie sich zu dem genannten Pfad.

#!/bin/sh 
#checks if the user has entered anything. 
#if not displays message. 
if [ $# -eq 0 ]; then 
     echo "Usage: restore <File name>" >&2 
    exit 2; 
fi 

#checks if the file paths.txt exist 
paths="$HOME/Paths/paths.txt" 
    if [[ ! -f $paths ]]; then #checks if the Paths file exists 
     echo "The log file paths.txt doesn't exist. Nothing to restore" 
fi 

#takes the user input checks if the dustbin exists. 
for file in "[email protected]"; do 
if [[ ! -d dustbin ]]; then 
    echo "dustbin doesn't exist" 
     else 
      cd $HOME/dustbin 
fi 

#looks for the user specified file. 
if [[ ! -e $file ]]; then 
    echo "File $file doesn't exist" 
     else 
#restores the file to the original location 
restore="grep -n '$file' $paths"  #no idea how to do it 
mv $file $restore 
fi 
done 

dieser Teil habe ich keine Ahnung, wie zu tun ist. Ich brauche es, um die Benutzereingaben in $ file aus der paths.txt zu lesen und den gespeicherten Pfad zu verwenden, um die $ -Datei aus dem Mülleimer in den Dateipfad zu verschieben, der in der Datei paths.txt gespeichert ist.

#restores the file to the original location 
restore="grep -n '$file' $paths"  #no idea how to do it 
mv $file $restore 
+0

Diese Frage ist ein guter Anfang hinzugefügt, aber unvollständig . Bitte lesen Sie [MCVE] (http://stackoverflow.com/help/mcve). Wo genau stecken Sie fest oder was erzeugt Fehler, die Sie nicht verstehen? – ghoti

+0

Außerdem haben Sie Ihre Frage ** [tag: bash] ** markiert, aber Ihr Skript beginnt mit '#!/Bin/sh', was bedeutet, dass Sie entweder eine Nicht-Bash-Shell ausführen, oder Sie sind Bash im Kompatibilitätsmodus ausführen. Aktualisieren Sie entweder Ihren Shebang oder Ihr Skript (und die Tags) entsprechend. – ghoti

+0

yeah Entschuldigung, das Bash-Tag wurde entfernt – darumpa

Antwort

0

Also, ich glaube, Sie die Datei wieder bewegen wollen, wo es ursprünglich mv wurde mit.

mv "dustbinPath/$file" "orginalPath/$file" 

Dadurch wird es vom Mülleimerpfad zum ursprünglichen Pfad verschoben.

EDIT:

originalPath=$(grep 'what_to_grep' file_to_grep.txt) 

Nachdem Sie, dass es in der Verwendung zu tun:

Wenn Sie den Pfad-Datei für sie grep möchten, können Sie eine Variable zur Ausgabe eines Befehls wie einstellen mv oben geeignet (ob die Textdatei diesen Dateinamen enthält oder nicht), um es zu entfernen.

Sie können mehr über das Setzen einer Variablen auf die Ausgabe von einem Befehl here lesen. Sie haben möglicherweise Probleme, wenn mehrere Zeilen vorhanden sind.

+0

mit dem es den ursprünglichen Speicherort der Datei nicht gelesen wird Das ist in der Pfaddatei gespeichert. – darumpa

+0

Kann mir meine Bearbeitung dann vielleicht irgendwie helfen? – jumper

+0

Ja, habe es heute herausgefunden, mein Skript funktioniert jetzt wie ein Zauber – darumpa

0

Im del Skript geändert ich realpath finden, so dass es wie folgt aussieht:

#gets just the file name 
for file in "[email protected]"; do    #reads all the arguments 
    if [[ -e $file ]]; then   #checks if the file name exists 
realpath $file >> $HOME/Paths/paths.txt && mv "$file" "$dustbin"  
     echo "Deleting file 'basename $file'" 
    else 
     echo "The file $file doesn't exist." 
    fi 
done 

und die Wiederherstellung Skript, das ich eine neue Variable

rest="$(grep -e $file $paths)"   #looking in to the paths.txt file for filename match 

#looks for the user specified file in the dustbin. 
if [[ ! -e $dustbin/$file ]]; then 
    echo "File $file doesn't exist" 
    elif [[ -e $rest ]]; then  #if the $file exists in the original path adds an extension .bak 
    mv $dustbin/$file $rest.bak 
    else 
    mv $dustbin/$file $rest  #restores the file to the original location 
    echo "$file restored" 
fi 
Verwandte Themen