Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 使用;“杜”;某些文件类型的总文件大小_Shell_Unix_Du - Fatal编程技术网

Shell 使用;“杜”;某些文件类型的总文件大小

Shell 使用;“杜”;某些文件类型的总文件大小,shell,unix,du,Shell,Unix,Du,我一直在使用du命令获取目录的大小: du /tmp/dir1 这产生了文件的总大小: 7 /tmp/dir1 然后我解析并使用这些细节 此文件夹中充满了.txt和txr文件。 我只对*.txt文件的总大小感兴趣 有没有一种方法可以修改du命令以生成一个只有*.txt文件大小的单行输出?将文件列表传递给du命令。例如: du -s /tmp/dir1/*.txt 仅获取总大小的一个可能解决方案是获取du输出的最后一行,如下所示: du -c /tmp/dir1/*.txt | tail

我一直在使用
du
命令获取目录的大小:

du /tmp/dir1
这产生了文件的总大小:

7   /tmp/dir1
然后我解析并使用这些细节

此文件夹中充满了
.txt
txr
文件。 我只对
*.txt
文件的总大小感兴趣


有没有一种方法可以修改
du
命令以生成一个只有
*.txt
文件大小的单行输出?

将文件列表传递给
du
命令。例如:

du -s /tmp/dir1/*.txt
仅获取总大小的一个可能解决方案是获取
du
输出的最后一行,如下所示:

du -c /tmp/dir1/*.txt | tail -1

将文件列表传递给
du
命令。例如:

du -s /tmp/dir1/*.txt
仅获取总大小的一个可能解决方案是获取
du
输出的最后一行,如下所示:

du -c /tmp/dir1/*.txt | tail -1

du
没有一种简单的方法来过滤输出;但是我们可以使用
find
stat
来获得文件大小,然后使用
awk
来总结:

$ find /tmp/dir1 -name '*.txt' -exec stat -c %s {} + | awk '{s+=$1} END {print s}' 

注意,由于不兼容的
stat
参数,这只适用于Linux/GNU系统。

du
没有一种简单的方法来过滤输出;但是我们可以使用
find
stat
来获得文件大小,然后使用
awk
来总结:

$ find /tmp/dir1 -name '*.txt' -exec stat -c %s {} + | awk '{s+=$1} END {print s}' 
注意:由于不兼容的
stat
参数,这只适用于Linux/GNU系统。

使用
--exclude
选项:

du --exclude '*.krt' /tmp/dir1
使用
--exclude
选项:

du --exclude '*.krt' /tmp/dir1

您还可以通过以下命令检查目录和文件的大小

导航到路径(/tmp/dir1
du-sh*
du-sh/tmp/dir1

  • s表示目录的总和
  • h表示人类可读的格式

您还可以通过以下命令检查目录和文件的大小

导航到路径(/tmp/dir1
du-sh*
du-sh/tmp/dir1

  • s表示目录的总和
  • h表示人类可读的格式

    • 以下是可能的选项:

      • 如果希望在同一目录(/tmp/dir1)中显示每个“.txt”文件的大小。 最后,它还将打印所有“.txt”文件的总大小
      du-csh*.txt

      • 递归地在给定的任意深度的dirs/sub dirs中查找每个“.txt”文件的大小,并在末尾打印所有这些文件的总大小
      查找-名称“*.txt”-exec du-csh'{}”+


      注意:您可以用任何其他文件类型替换.txt

      以下是可能的选项:

      • 如果希望在同一目录(/tmp/dir1)中显示每个“.txt”文件的大小。 最后,它还将打印所有“.txt”文件的总大小
      du-csh*.txt

      • 递归地在给定的任意深度的dirs/sub dirs中查找每个“.txt”文件的大小,并在末尾打印所有这些文件的总大小
      查找-名称“*.txt”-exec du-csh'{}”+


      注意:您可以将.txt替换为任何其他文件类型

      这样做的一个潜在问题是,如果目录包含的文件太多(即超过ARG_MAX),则该文件将被破坏;这可能不是现在的情况,但我已经学会(艰难的方式)不依赖shell globbing来完成这类事情…这很好,但我正在寻找一行输出,这将列出每个
      .txt
      文件及其大小,我想要总数。如果你想要总数,只需使用:du-cs/tmp/dir1/*。txt使用
      | tail-1
      的神奇家伙正是我想要的!非常感谢!这样做的一个潜在问题是,如果目录包含太多的文件(即超过ARG_MAX),则会中断该操作;这可能不是现在的情况,但我已经学会(艰难的方式)不依赖shell globbing来完成这类事情…这很好,但我正在寻找一行输出,这将列出每个
      .txt
      文件及其大小,我想要总数。如果你想要总数,只需使用:du-cs/tmp/dir1/*。txt使用
      | tail-1
      的神奇家伙正是我想要的!非常感谢!谢谢,我喜欢这个解决方案,将来一定会用。谢谢,我喜欢这个解决方案,将来一定会用。很好的解决方案,我喜欢你的想法。遗憾的是,这在我的特定系统上不起作用。@DustinCook这就是为什么要在问题中提到您的环境:-)UNIX(-like)系统并不总是非常可移植的,不幸的是…@DustinCook;-)无论如何,你应该提到它,如果只是为了防止像这样的“错误”答案;它浪费了你的时间去阅读和尝试,也浪费了我的时间去测试它以确保我得到了正确的答案。例如,如果您提到“我正在使用AIXVersionFoo”,我可能不会费心,因为我不确定AIX支持什么和不支持什么,并且宁愿不给出答案,也不愿给出错误的答案……很好的解决方案,我喜欢您的想法。遗憾的是,这在我的特定系统上不起作用。@DustinCook这就是为什么要在问题中提到您的环境:-)UNIX(-like)系统并不总是非常可移植的,不幸的是…@DustinCook;-)无论如何,你应该提到它,如果只是为了防止像这样的“错误”答案;它浪费了你的时间去阅读和尝试,也浪费了我的时间去测试它以确保我得到了正确的答案。例如,如果您提到“我正在使用AIXVersionFoo”,我可能就不会费心了,因为我不确定AIX支持什么和不支持什么,宁愿不给出答案,也不愿给出错误的答案。。。