我如何执行 tar/gzip 然后安全地删除目录?

我如何执行 tar/gzip 然后安全地删除目录?

我应该如何安全地 tar/gzip 和删除文件?

背景:Ubuntu 计算机(Hardy Heron)的磁盘空间有点不足,我想使用 tar/gzip 压缩,验证它是否有效,然后删除一些不再使用的目录。我计划对要删除的每个目录进行 tar gzip 压缩。(gzip 将压缩到硬盘,而不是磁带)

我找到了一个应该安全但实际上并不安全的解决方案unix.com。这并不安全,因为在当前版本的 tar 中,即使未创建存档,--remove-files 也可以删除文件。(已确认为这封电子邮件

我还注意到--compare 选项,但它说它“忽略文件系统中在档案中没有相应成员的文件”。

此外,gzip 是否会影响 tar 检查现有文件的能力?

答案1

您可以配置同步传输--delete-after。它还包括许多其他选项 - 即您可以完全避免 tar / gzip 步骤。使用 rsync 备份您的内容并删除本地副本。有关详细说明,请参阅scrounge.orgmikerubel.org

答案2

我用这个脚本是为了我自己的用途:

#!/bin/ksh
#
# @(#)$Id: save.sh,v 2.2 2007/09/01 23:41:23 jleffler Exp $"
#
# Compress directories to save space

case $(id | sed 's/^uid=\([0-9][0-9]*\)(.*/\1/') in
0)  echo "$(basename $0 .sh): cannot run safely as root!" 1>&2
    exit 1;;
esac

for d in ${*:-`pwd`}
do
    (
    set -e
    echo $d
    cd $d
    b=`basename $d`
    chmod 755 .
    [ ! -d Safe ] && mkdir Safe
    chmod 755 Safe
    # GNU Tar Only!
    find . -type f -print | grep -v '^./Safe' | tar -czf Safe/$b.tgz -T -
    chmod 444 Safe/$b.tgz
    chmod 555 Safe
    (set +e; rm -fr `pwd` 2>/dev/null ; exit 0)
    chmod 755 Safe
    mv Safe/* .
    rmdir Safe
    chmod 555 .
    )
done

请注意,即使所有者不能删除目录,'root' 也可以删除目录 - 因此它拒绝让 'root' 运行它。在冒险执行任何重要操作之前,请先在目录副本上试用它。我对此很满意 - 您可能更喜欢其他东西。

有一天,我会让它与“bzip2”或其他压缩器一起工作。

相关内容