tar压缩后删除目录

tar压缩后删除目录

我正在尝试压缩整个目录树,只留下一个 .tar.bz2 文件,而不是我用 find 找到的每个目录。目的是创建一个 cronjob 来每周执行此操作。

我成功用来列出要压缩的目录的命令是:

find rootDirectory/ -mindepth 2  -type d  -not -name '*.bz2'

我用来压缩和完成整个工作的一个是:

find rootDirectory/ -mindepth 2  -type d  -not -name '*.bz2' -exec  tar --remove-files -cjf ./{}.tar.bz2 ./{}  \ ;

它的工作正常,但它会为每个压缩目录抛出一个错误,如下所示:

find: ‘rootDirectory/directory2/02-09-2020-183833-700’: No such file or directory

我在 rootDirectory/directory2/02-09-2020-183833-700.tar.bz2 中得到了所需的结果,但我想消除执行时的错误。我究竟做错了什么?。

提前致谢!

答案1

我假设在创建存档后--remove-files会删除源目录。tarfind实用程序不知道该目录已消失,并且仍会尝试进入该目录以查找与其搜索条件匹配的其他内容。

为了避免输入以这种方式创建存档的目录,请--prune在命令末尾添加find

find rootDirectory/ -mindepth 2  -type d  ! -name '*.bz2' \
    -exec  tar --remove-files -cjf {}.tar.bz2 {}  \; --prune

主要--prune指示find从要调查的路径中删除该搜索路径,以便它不会尝试进入该目录(该目录不再存在)。

让我印象深刻的是,在这种情况下您可能不需要find,因为您将创建tarrootDirectory.使用循环可以轻松完成:

for dir in rootDirectory/*/*/; do
    tar --remove-files -cj -f "${dir%/}.tar.bz2" "$dir"
done

这里唯一的区别是您会错过具有隐藏名称的目录。

相关内容