![Shellscript - 从文本文件读取文件路径进行恢复](https://linux22.com/image/1513483/Shellscript%20-%20%E4%BB%8E%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%E8%BF%9B%E8%A1%8C%E6%81%A2%E5%A4%8D.png)
我正在编写一个回收站脚本,可以调用它来删除文件和恢复文件。
删除功能目前运行良好,可以使用通配符、文件名(当前目录)或完整文件路径来调用。然后它会获取此文件并将其存储在 /root/Dustbin/... 中。
# del example.txt
在执行此操作的同时,它还将原始文件路径存储在垃圾箱中的 log.txt 文件中。
现在我的问题是 - 我该如何将文件恢复到其原始位置(存储在 log.txt 文件中)?
我的恢复代码目前是:
#!/bin/sh
for path in "$@"; do
find /root/Dustbin -name "$path" -exec mv {} ./ \;
done
#End of script
目前,这会将 Dustbin 中指定的文件恢复到我当前的位置,使用
# restore example.txt
谢谢
答案1
如果没有关于日志文件的更多详细信息,很难给出确切的答案,但这里有一些指示。
用于grep
从日志中选择正确的行。确保命令足够具体,以便通过使用行首 ( ^
) 之类的内容或匹配日志中使用的任何分隔符来固定搜索,从而获得一个确切的结果。
使用awk
或sed
从命令返回的行读取路径grep
。再次确保获取完整路径以及您所需的路径元素。(注意空格等)
再次指定要恢复的目标时,请务必注意空格和其他字符,这些字符可能会mv
通过正确引用路径来弄乱命令。为了避免文件名中的破折号问题,您可以--
在要传递给mv
命令的任何选项后添加。--
表示大多数命令的参数结尾。
一些额外的想法:
- 如果你把所有已删除的文件放在同一个目录中,则不需要查找,你可以简单地
mv
从/root/Dustbin
原始位置 - 但是如果你将所有文件放在同一个目录中而不重命名它们,你最终可能会覆盖垃圾箱中的文件
- 在删除和恢复脚本中添加足够的错误处理
- 不要依赖这样的机制来保护重要文件!如果您需要确保可以恢复特定文件,则需要确保您有可用的正确备份,并确保您可以从中恢复