Я сделал 1 скрипт для перемещения указанных пользователем файлов в мусорную корзину и создания файла журнала с их исходными путями. Теперь я хочу создать сценарий, в котором пользователю нужно будет только ввести имя файла, чтобы восстановить его там, где он был раньше, и я не могу этого понять. Вот код на данный момент:

Удалить скрипт:

#!/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 "$@"; 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 

Сценарий восстановления: с этим мне нужно найти файл в мусорной корзине, сопоставить имя файла с текстовым файлом путей, который имеет исходный путь к файлам, и перейти к указанному пути.

#!/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 "$@"; 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

Эту часть я понятия не имею, как это сделать. Мне нужно, чтобы он прочитал ввод пользователя в $ file из paths.txt и использовал этот сохраненный путь для перемещения $ file из мусорной корзины в путь к файлу, хранящийся в файле paths.txt.

#restores the file to the original location
restore="grep -n '$file'  $paths"       #no idea how to do it
mv $file $restore
0
darumpa 25 Ноя 2016 в 18:29

2 ответа

Лучший ответ

Итак, я думаю, вы захотите переместить файл обратно туда, где он изначально использовался mv.

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

Это переместит его из мусорной корзины в исходный путь.

РЕДАКТИРОВАТЬ:

Если вы хотите использовать grep для файла пути к нему, вы можете установить переменную для вывода команды, например:

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

После этого используйте его в mv выше (независимо от того, содержит ли текстовый файл это имя файла или нет), чтобы переместить его.

Вы можете узнать больше об установке переменной для вывода из команды здесь. Однако у вас могут возникнуть проблемы, если он есть на нескольких строках.

0
Community 23 Май 2017 в 11:52

В сценарии del я изменил find на realpath, чтобы он выглядел так:

#gets just the file name 
for file in "$@"; 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

И скрипт восстановления я добавил новую переменную

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
0
darumpa 29 Ноя 2016 в 18:32