简体   繁体   中英

restore in linux bash scripting

Help needed. This is script that I use to perform a restoration of a file from dustbin directory to its original location. It was located before in root. Then using other script it was "deleted" and stored in dustbin directory, and its former location was documented in storage file using this:

case $ans in
    y) echo "`readlink -f $1`" >>home/storage & mv $1 /home/dustbin ;;
    n) echo "File not deleted." ;;
    *) echo "Please input answer." ;;
esac

So when using the script below I should restore the deleted file, but the following error comes up.

#!/bin/sh

if [ "$1" == "-n" ] ; then
    cd ~/home/dustbin
    restore="$(grep "$2" "$home/storage")"
    filename="$(basename "$restore")"
    echo "Where to save?"
    read location
    location1="$(readlink -f "$location")"
    mv -i $filename "$location1"/$filename
else
    cd ~/home
    storage=$home/storage
    restore="$(grep "$1" "$storage")"
    filename="$(basename "$restore")"
    mv -i $filename $restore
fi

error given - mv: missing file operand

EDIT:

so okay, I changed my script to something like this.

#!/bin/sh

if [ $1 ] ; then

    cd ~/home
    storage=~/home/storage
    restore="$(grep "$1" "$storage")"
    filename="$(basename "$restore")"
    mv -i "$filename" "$restore"

fi

and still I get error:

mv: cannot stat `filename': No such file or directory

You might want to do some basic error handling to see if $filename exists before you use it as part of mv :

For example, before:

mv -i $filename "$location1"/$filename

You should probably do a:

if [[ -e "$filename" ]]; then
    # do some error handling if you haven't found a filename
fi

The -e option checks whether the next argument to [[ refers to a filename that exists. It evaluates to true if so, false otherwise. (Alternatively, use -f to check if it's a regular file)

Or at least: if [[ -z "$filename" ]]; then # do some error handling if you haven't found a filename fi

The -z option checks whether the next argument to [[ is the empty string. It evaluates to true if so, false otherwise.

Similar comment about: mv -i $filename $restore in your else clause.

Here's a list of test options.

You do

cd ~/home

and

mv -i "$filename" "$restore"

while the file is located in the dustbin directory, therefore, it is not found. Do either

cd ~/home/dustbin

or

mv -i "dustbin/$filename" "$restore"

or just do

mv -i "~/home/dustbin/$filename" "$restore"

and drop the cd .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM