我正在编写一个小的 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
在编写脚本时不建议使用 更改工作目录。将其包装在 中(...)
可以确保安全。