Unix:快速'删除目录'以清理每日构建

19 aix solaris build

有没有更快的方法来删除目录,然后只需提交

rm -r -f *directory*
Run Code Online (Sandbox Code Playgroud)

?我问这个是因为我们的日常跨平台构建非常庞大(例如每个构建4GB).因此,某些机器上的硬盘经常耗尽空间.

这就是我们的AIX和Solaris平台的情况.

也许在这些平台上有删除目录的"特殊"命令?

PASTE-EDIT(将我自己的答案移到问题中):

我一般都在想为什么'rm -r -f'这么慢.不'rm'只需要修改'..'或'.' 用于取消分配文件系统条目的文件.

就像是

mv *directory* /dev/null
Run Code Online (Sandbox Code Playgroud)

会好的.

Bal*_*sár 23

要从文件系统中删除目录,rm是您最快的选择.在linux上,有时我们在ramdisk中进行构建(几GB),它有一个非常令人印象深刻的删除速度:)你也可以尝试不同的文件系统,但在AIX/Solaris上你可能没有很多选项......

如果你的目标是让目录$ DIR空现在,你可以将其重命名,并从后台/ cron作业后删除它:

mv "$dir" "$dir.old"
mkdir "$dir"
# later
rm -r -f "$dir.old"
Run Code Online (Sandbox Code Playgroud)

另一个技巧是你为$ dir创建一个单独的文件系统,当你想要删除它时,你只需重新创建文件系统.像这样的东西:

# initialization
mkfs.something /dev/device
mount /dev/device "$dir"


# when you want to delete it:
umount "$dir"
# re-init
mkfs.something /dev/device
mount /dev/device "$dir"
Run Code Online (Sandbox Code Playgroud)

  • "umount'temp-fs'并重新创造"是个好主意!我接受这是最好的答案! (4认同)

yeg*_*gle 18

我忘记了这个技巧的来源,但它有效:

EMPTYDIR=$(mktemp -d)
rsync -r --delete $EMPTYDIR/ dir_to_be_emptied/
Run Code Online (Sandbox Code Playgroud)

  • 我很想理解*为什么*rsync方法要快得多 (4认同)

Tom*_*ire 7

rm -r directory其工作原理是通过目录深度优先向下递归,删除文件,并在备份过程中删除目录。它必须这样做,因为您无法删除不为空的目录。

又长又无聊的细节:每个文件系统对象都由文件系统中的一个 inode 表示,该 inode 具有文件系统范围内的平面 inode 数组。 [1] 如果您只是删除目录而没有先删除其子目录,那么子目录将保持分配状态,但没有任何指向它们的指针。(fsck在运行时检查此类情况,因为它代表文件系统损坏。)

[1] 对于每个文件系统来说,这可能并不完全正确,并且可能有一个文件系统按照您所描述的方式工作。它可能需要诸如垃圾收集器之类的东西。然而,我所知道的所有常见的行为fs 对象都由 inode 拥有,目录是名称/inode 编号对的列表。


pax*_*blo 5

至少在AIX上,您应该使用逻辑卷管理器LVM.我们所有的系统都将所有物理硬盘驱动器捆绑到一个卷组中,然后创建一个大的honkin'文件系统.

这样,您可以随意添加物理设备到您的计算机,并将文件系统的大小增加到您需要的任何内容.

我见过的另一个解决方案是在每个文件系统上分配一个垃圾目录,并使用mvfind cron作业的组合来解决空间问题.

基本上,有一个cron每十分钟运行一次并执行的工作:

rm -rf /trash/*
rm -rf /filesys1/trash/*
rm -rf /filesys2/trash/*
Run Code Online (Sandbox Code Playgroud)

然后,当您希望回收该文件系统上的特定目录时,请使用以下内容:

mv /filesys1/overnight /filesys1/trash/overnight
Run Code Online (Sandbox Code Playgroud)

并且,在接下来的十分钟内,您的磁盘空间将开始恢复.filesys1/overnight即使在删除已删除的版本之前,该目录也将立即可用.

垃圾邮件目录与您要删除的目录位于同一文件系统上非常重要,否则您手上有大量的复制/删除操作,而不是相对快速的移动.