3

需要帮助。这是我用来将文件从垃圾箱目录恢复到其原始位置的脚本。它之前位于根目录中。然后使用其他脚本将其“删除”并存储在垃圾箱目录中,并且使用以下命令将其以前的位置记录在存储文件中:

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

因此,当使用下面的脚本时,我应该恢复已删除的文件,但出现以下错误。

#!/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

给出的错误 -mv: missing file operand

编辑:

好吧,我把我的脚本改成了这样。

#!/bin/sh

if [ $1 ] ; then

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

fi

我仍然得到错误:

mv:无法统计“文件名”:没有这样的文件或目录

4

2 回答 2

0

你做

cd ~/home

mv -i "$filename" "$restore"

而该文件位于垃圾箱目录中,因此找不到。做任何一个

cd ~/home/dustbin

或者

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

或者只是做

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

并删除cd.

于 2013-09-18T08:05:50.350 回答
0

在将其用作以下内容之前,您可能需要进行一些基本的错误处理以查看是否$filename存在mv

例如,之前:

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

你可能应该做一个:

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

-e选项检查下一个参数是否[[引用了一个存在的文件名。如果是,则评估为真,否则为假。(或者,用于-f检查它是否是常规文件)

或者至少:如果 [[ -z "$filename" ]]; 然后 # 如果你还没有找到文件名 fi,做一些错误处理

-z选项检查下一个参数是否[[为空字符串。如果是,则评估为真,否则为假。

类似的评论:mv -i $filename $restore在你的else条款中。

这是测试选项的列表。

于 2012-11-30T00:27:57.617 回答