Linux

Linux:使用命令查找大小第二大的文件/目錄

  • November 8, 2018

介紹

使用命令查找大小第二大的文件/目錄。

是)我有的

du /etc/ -hsx * | sort -rh | head -2

該命令向我顯示了兩行,通過我選擇的選項,我獲得了 /etc/ 中最大的 2 個文件/目錄。

問題

如果我只想找到第二大文件怎麼辦?我該怎麼做?

例如,通過執行命令sudo du /etc/ -hsx * | sort -rh | head -2 | tail -1

我得到結果

1.5M 卡扣

但我期望得到的只是它的名字,而不是大小。只是名字。我也讀過這也可以用ls命令來完成。

假設通過size,您的意思是非目錄文件的磁碟使用量或通過目錄文件引用的所有文件的累積磁碟使用量(如您所建議的du那樣),使用 GNU 實用程序,您可以執行以下操作:

sudo LC_ALL=C du -al0d1 /etc |
 sort -zrn |
 tail -zn+2 |
 head -zn1 |
 cut -zf2- |
 tr '\0' '\n'

tail++headcut可以替換為sed -z $'1d;s/^[^\t]*\t//;q'.

筆記:

  • with du /etc/ -hsx *(假設 GNUfind並且POSIXLY_CORRECT不在環境中,因為您在非選項參數之後使用選項),您將獲得目前目錄/etc中所有非隱藏文件的磁碟使用情況。
  • 使用-aand -d1(一個 GNU 擴展)解決了*排除隱藏目錄或達到參數數量限制的所有問題。
  • -h不僅不可移植,而且還會失去很多精度(因此可能會使您報告錯誤的文件),並且使sort工作變得更加困難,因此適得其反。
  • 如果沒有-l(GNU 擴展),硬連結只計算一次,因此如果some-large-file同時找到/etc/dir1/some-large-file/etc/dir2/other-link-to-some-large-file,則佔用的磁碟空間some-large-file僅計入這些目錄之一du
  • /etc換行符與文件名中的任何字元一樣有效(macOS 實際上曾經在IIRC中使用帶有換行符的文件名)。所以通常你不能使用基於行的文本處理來處理這些。大多數 GNU 實用程序都有-z或可以-0選擇使用 NUL 分隔的記錄。
  • 請注意,在該排序列表中,第一條記錄將是 for /etc。因此,通過獲取第二條記錄,我們實際上報告的是 中最重的文件/目錄/etc,而不是第二重的。
  • sort如果存在平局,則將通過without完成的最後一種比較選擇在語言環境排序順序中最後排序的文件名-s

如果我只想找到第二大文件怎麼辦?我該怎麼做?

強制 zsh 選項:

zsh -c 'print -r /etc/**/*(DoL[-2])'

這會呼叫 zsh 並要求它列印參數,即:

  • 遞歸文件名擴展**/*
  • 按大小(ength)排序(ordered),大小L遞增
  • D為那個 glob啟用dotglob,因此也考慮隱藏文件或隱藏目錄中的文件。
  • 限於列表中倒數第二個條目 ( [-2])

引用自:https://unix.stackexchange.com/questions/480424