在Linux Bash脚本中恢复数据

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: 缺少文件操作数

编辑:

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

#!/bin/sh

if [ $1 ] ; then

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

fi

但是我仍然遇到错误:

mv: 无法查找“filename”:没有那个文件或目录


1
在第二个 mv 行之前添加 echo "<$filename> <$restore>"(并类似地添加到第一个)以查看正在发生的情况。 - choroba
请学习如何在StackOverflow上使用搜索功能。[bash] restore file 返回了许多已经得到解答的问题。祝你好运。 - shellter
2个回答

0

在使用mv命令之前,您可能需要进行一些基本的错误处理,以查看$filename是否存在:

例如,在执行以下操作之前:

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

你可能应该执行:

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

-e选项检查[[的下一个参数是否是存在的文件名。如果是,则返回true,否则返回false。(或者使用-f来检查它是否是一个常规文件)

或者至少: 如果[[ -z“$filename”]]; then # 如果没有找到文件名,则进行一些错误处理 fi

-z选项检查[[的下一个参数是否为空字符串。如果是,则返回true,否则返回false。

关于你的else子句中的mv -i $filename $restore也有类似的注释。

这里是测试选项列表。


所以好的,我像这样尝试了一下...如果[[ -e“$filename”]];那么mv -i $filename“$location1”/$filename fi。我理解得对吗?我还尝试了-z和-f。在执行恢复文件名后,然后mv:无法统计“文件名”:没有那个文件或目录。但是它位于垃圾箱目录中。 - Rihards Dobelis
评论#1的建议给了我这个消息的显示:<filename> </root/filename>,这是什么意思? - Rihards Dobelis
@RihardsDobelis,你的问题缺少很多细节,比如文件在哪里,你是如何调用脚本的(以及传递给它的参数是什么)。 - sampson-chen
我的任务包含3个脚本。第1个脚本是用于删除文件的(将它们从任何目录移动到垃圾箱目录,并将它们的旧位置存储在位于主目录中的“storage”文件中)。第2个脚本是清空垃圾箱目录的垃圾清理脚本。第3个脚本是还原脚本,应该从垃圾箱目录将文件恢复到它们的原始目录,并从存储文件中获取文件的最后位置。我希望我表述清楚了! - Rihards Dobelis
仍在苦苦挣扎!需要帮助! - Rihards Dobelis

0

你做

cd ~/home

并且

mv -i "$filename" "$restore"

当文件位于垃圾桶目录中时,因此找不到。 请执行以下操作:

cd ~/home/dustbin

或者

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

或者只需执行

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

并且删除 cd


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接