
我应该如何安全地 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.org和mikerubel.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”或其他压缩器一起工作。