gpt4 book ai didi

linux - Bash 脚本中的回收站

转载 作者:太空宇宙 更新时间:2023-11-04 12:38:33 24 4
gpt4 key购买 nike

我正在尝试使用 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 `'

对我哪里出错有什么想法吗?

最佳答案

试试这个:

回收.sh

#!/bin/sh  

set -e

check_dir() {
[ ! -d $1 ] || return 0
mkdir --parents $1
}

check_dir "${HOME}/recycle/recycle_bin"
touch "${HOME}/recycle/recycle_log"

for file in "$@"; do
echo "$(readlink -f "$file")" >> "${HOME}/recycle/recycle_log"
mv "$file" "${HOME}/recycle/recycle_bin"
done

#end

恢复.sh

#!/bin/sh

set -e

cd "${HOME}/recycle/recycle_bin" || exit 1

for name in "$@"; do
file=$(grep "\/${name}\$" "${HOME}/recycle/recycle_log")
mv -i $name "$file"
sed -i "/\/${name}\$/ d" "${HOME}/recycle/recycle_log"
done

一些见解:

set -e:出现任何错误时中止,以避免一些 if 的情况

$@:参数数组($1, $2...)

[ ! -d $1] ||返回 0:因为我们使用的是 set -e,所以如果目录存在则不会失败

grep "\/${name}\$"...: 只匹配路径末尾的名字

sed -i:sed 就地编辑以删除该行

关于linux - Bash 脚本中的回收站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com