使用 bash 脚本备份旧目录

使用 bash 脚本备份旧目录

我正在编写一个小的 bash 脚本,用于在目录超过一定期限时将其以压缩格式存档到另一个位置,但遇到了一些困难。这就是我正在做的事情。

#!/bin/bash
# Archives completed CDP episodes to compressed storage. Will eventually expand to put these off-site as well.

InputDir="/home/wgant/stuff/"
OutputDir="/home/wgant/archived/"

find $InputDir$ -maxdepth 0 -mtime +1 -type d -exec echo $OutputDir${} \;

我对 bash 不太熟悉,所以我会慢慢来。第一步,我只想转储输出文件名称的列表。但是,当我运行上面的命令时,文件名是正确的,但完整路径显然被连接在一起了,这是我不想要的。我该如何删除文件名?

显然,一旦这有效,我就会发出调用来创建 tarball 并删除相关目录。

答案1

语法不太正确,这样更好:

find $InputDir -maxdepth 0 -mtime +1 -type d -exec echo $OutputDir{} \;

要删除路径的前缀部分,一个简单的方法是cd在执行之前进入目录find,如下所示:

InputDir="/home/wgant/stuff"
OutputDir="/home/wgant/archived"

(cd "$InputDir"; find . -maxdepth 0 -mtime +1 -type d -exec echo "$OutputDir"/{} \;)

请注意,我将最后一个命令包装在 中(...)。这是一个子 shell,其目的是使cd命令仅在其中有效,其余脚本不会受其影响。这很重要,因为cd在编写脚本时不建议使用 更改工作目录。将其包装在 中(...)可以确保安全。

相关内容