我正在编写一个小的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有一点绿色,所以我慢慢来。 对于第一步,我只想转储输出文件将被调用的列表。 但是,当我运行上述,文件名是正确的,但完整的path显然是连接在,我不想要的。 我该如何删除文件名?
很明显,一旦这个工作,我会打电话来创build压缩包,并删除有问题的目录。
语法不太对,这是更好的:
find $InputDir -maxdepth 0 -mtime +1 -type d -exec echo $OutputDir{} \;
要去掉path的前缀部分,一个简单的方法是在执行find之前先cd到目录中,如下所示:
InputDir="/home/wgant/stuff" OutputDir="/home/wgant/archived" (cd "$InputDir"; find . -maxdepth 0 -mtime +1 -type d -exec echo "$OutputDir"/{} \;)
请注意,我在(...)包装了最后一个命令。 这是一个子shell,其目的是cd命令只在其内部有效,脚本的其余部分不会受到它的影响。 这很重要,因为在脚本中不推荐使用cd更改工作目录。 将其包裹(...)使其安全。