linux - 所有文件的总大小小于

标签 linux bash

所以我正在计划备份,子目录中有数千个文件,我知道最大的文件只是我不需要备份的数据集,而不是我创建的东西。

我发现这个有用的命令 here它列出了所有大于或小于给定尺寸的东西:

如果我这样做:

find . -type f -size +1000M

它只列出了 4 个文件,但对于 +100M,大约有 30 个文件。我可以仔细查看,看看是否有任何重要的东西需要保留并相应地调整阈值。

想要一个总大小,以便我知道它是否适合 25 或 100MB 的光盘..

所以我试着像这样将它传送到 du 但它似乎不起作用,即给我找到的 4 个文件的总数:

find . -type f -size +1000M | du

有谁知道如何做到这一点?

(是的,当然会将 + 更改为 - ,小于不大于之前查看数字,但在查看 30 个文件而不是数千个文件时更容易看出它是否正常工作)。

最佳答案

您可以使用 -printf 运行 find,它有很多选项来控制它打印的内容(已记录 here )。所以你可以打印每个文件,然后是它使用了多少个 1 KB 的磁盘 block ,使用:

find . -type f -size +1000M -printf '%p %k\n'

完成后,用 awk 求和比用 du 求和更容易:

find . -type f -size +1000M -printf '%p %k\n'  | awk 'BEGIN{total=0}{total += $2}END{print total}'

那是因为 du 只接受以 NUL (ASCII 0) 结尾的输入列表。所以你必须这样做:

find . -type f -size +1000M -printf '%p\0' | du -k --files0-from=- --total

然后查看最后一行“总计”。但是以 NUL 结尾的文件名列表并不便于用户查看;没有用户名,文件名看起来是连在一起的。

关于linux - 所有文件的总大小小于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43636925/

相关文章:

mysqldbcopy - 错误 1045 : Access denied for user 'root' @'localhost' (using password: NO)

linux - 将三个数据文件连接成具有不同且相同时间步长的矩阵

bash 函数使用命令、管道和变量处理参数

c - Linux 上的管道读取是原子的吗(多个作者,一个读者)?

php - CodeIgniter 项目无法在基于 Linux 的远程服务器上运行

c++ - 如何将用 C++ 编写并使用 Linux GCC 编译的程序移植到 Windows?

design-patterns - Shell 脚本的设计模式或最佳实践

linux - Bash 带点的 2 位小数

linux - 使用环回接口(interface)在生产应用程序之间进行通信

Linux:使用 lsyncd 同步多个服务器上的多个文件夹