我正在编写一个小的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上有点绿,所以我慢慢来.对于第一步,我只想转储一个输出文件将被调用的列表.但是,当我运行上面的命令时,文件名是正确的,但完整的路径显然是连接在一起,我不想要.我如何删除文件名?
语法不太对,这更好:
find $InputDir -maxdepth 0 -mtime +1 -type d -exec echo $OutputDir{} \;
要删除路径的前缀部分,一种简单的方法是在执行find之前进入目录,如下所示:
InputDir="/home/wgant/stuff" OutputDir="/home/wgant/archived" (cd "$InputDir"; find . -maxdepth 0 -mtime +1 -type d -exec echo "$OutputDir"/{} \;)
请注意,我将最后一个命令包装在(…)中.这是一个子壳,它的目的是cd命令只在其中有效,脚本的其余部分不会受其影响.这很重要,因为不建议在脚本中使用cd更改工作目录.将其包裹在(…)内使其安全.