【发布时间】:2016-11-30 05:57:59
【问题描述】:
我正在尝试使用 bash 脚本在 VM 中创建一个基本的回收站概念。它将需要删除已输入的文件并将它们放入创建的目录中,并将路径(原点)保存到日志文件中,以便以后在恢复功能中使用。
我将从我的删除/回收代码开始,我认为它工作得很好,但似乎有点不整洁/包含冗余代码:
#!/bin/sh
if [ ! -d ~/recycle ]
then mkdir ~/recycle
fi
if [ ! -d ~/recycle/recycle_log ]
then mkdir ~/recycle/recycle_log
fi
if [ ! -d ~/recycle/recycle_bin ]
then mkdir ~/recycle/recycle_bin
fi
if [ -d ~/recycle ]
then
echo "$(readlink -f "$1")" >> "$HOME/recycle/recycle_log/log_file" && mv "$1" "$HOME/recycle/recycle_bin"
echo "$(readlink -f "$2")" >> "$HOME/recycle/recycle_log/log_file" && mv "$2" "$HOME/recycle/recycle_bin"
echo "$(readlink -f "$3")" >> "$HOME/recycle/recycle_log/log_file" && mv "$3" "$HOME/recycle/recycle_bin"
echo "$(readlink -f "$4")" >> "$HOME/recycle/recycle_log/log_file" && mv "$4" "$HOME/recycle/recycle_bin"
fi
#end
此后我的恢复脚本如下:
#!/bin/sh
cd "$HOME/recycle/recycle_bin" || exit 1
mv -i "$(grep "$1" "$HOME/recycle/recycle_log")"
我想这有点接近我需要返回存储在日志/回收站中的任何已删除文件以恢复其原始位置但我得到的错误是:
mv: missing destination file operand after `'
对我哪里出错有什么想法吗?
【问题讨论】:
-
你只给
mv一个参数。也许您的想法是mv -i "$1" "$(grep "$1" "$HOME/recycle/recycle_log")"将文件移动到其日志条目。 -
@thatotherguy other guy 这将错误更改为
mv: cannot move 'example.txt' to ': No such file or directory -
我没有注意到您将日志写入
$HOME/recycle/recycle_log/log_file,但请您的 grep 从$HOME/recycle/recycle_log读取。你可以使用mv -i "$1" "$(grep "$1" "$HOME/recycle/recycle_log/log_file")"来解决这个问题 -
@thatotherguy 我怀疑我有点失明,但并不认为我那么糟糕。另一方面,由于这现在可以工作,我将如何实现它,以便在恢复日志文件时清除该特定行?
-
Here's a question 关于那个。
标签: linux sh recycle-bin