Bash 恢复使用rm命令删除的文件

Bash 恢复使用rm命令删除的文件,bash,shell,sh,Bash,Shell,Sh,如果我运行命令,请 # CREATE TRASH FOLDER if ! [ -d "$HOME/deleted" ] ; then mkdir $HOME/deleted fi TRASH=$HOME/deleted mv $@ $TRASH 将文件或目录移动到创建的垃圾箱。我可以运行什么命令将同一文件恢复到原始目录我只需执行与同一命令行相反的操作 function undo () { echo -n "Do you want to recover $*? " rea

如果我运行命令,请

#  CREATE TRASH FOLDER

if ! [ -d "$HOME/deleted" ] ; then
     mkdir $HOME/deleted
fi

TRASH=$HOME/deleted
mv $@ $TRASH

将文件或目录移动到创建的垃圾箱。我可以运行什么命令将同一文件恢复到原始目录

我只需执行与同一命令行相反的操作

function undo () {
  echo -n "Do you want to recover $*? "
  read ANSWER
  if [ "$ANSWER" = "y" ]; then
    mv $TRASH/$@ $PWD
    echo "$@ successfully recovered"
  else
    echo "Oops, request denied"
  fi
}

如果像这样创建一个已删除的目录,可能会出现一些意外行为。例如:

rm_script test.txt
cd ../other_directory
rm_script test.txt
将创建一个文件test.txt,其中包含
other\u dir
中的内容。启动rm_脚本编写/移动目录时会更加有趣

了解这一点,并再次参考trash cli(请参阅注释Aserre),您可能会:

if ! [ -d "$HOME/deleted" ] ; then
    echo "What a pity! No deleted directory."
    echo "Your file(s) is/are lost forever!"
    exit 361
fi

TRASH=$HOME/deleted
for file in  $@ ; do
    if [ -f "$TRASH/$file" ] ; then
        cp "$TRASH/$file" .
    else
        echo "Hmm,.. I cannot find $file."
    fi
done

这也可能会产生一些不必要的结果,例如从一个目录中删除文件,然后在另一个目录中取消删除。

这种操作没有内置的支持。您可能需要为此编写一个单独的脚本。同样,您的问题标题为
rm
,但代码显示的是
mv
?要实现这样的逻辑,您需要将原始路径存储在某个位置(可能在文件名中?),该命令实际上使用mv命令像rm一样运行。因此,我已经将一个文件或目录移动到一个路径,我想将其恢复为一个,可能是一个版本控制系统。要在命令行上模拟垃圾箱行为,您可以使用像您这样的自定义脚本,或者使用现有的
垃圾cli
$PWD
不正确。这些文件在被移动之前可能在任何地方。另外,如果
$@
具有多个文件名,则
$TRASH/$@
将不起作用。我假定该文件已从运行相同恢复命令的当前目录中删除。如果am将“$TRASH/$file”复制到正式删除它的目录,或者将其移动到双引号
$@
以支持带空格的文件名等,那么cp“$TRASH/$file”会起什么作用。