我碰到下面的命令,這近做什麼,我需要:OSX bash的遞歸找到大小排序的文件除了在文件夾
find . -type f -print0 | xargs -0 ls -l | sort -k5,5rn > ~/files.txt
現在,我沒有什麼線索任何這意味着(會喜歡解釋,但不是那麼重要)。
我需要添加的一件事就是不要打擾特定的文件夾(即我有一個文檔文件夾與成千上萬的Word文檔,這使得這個命令需要很長的時間10s)。
任何人都可以建議除了上面的命令,會發現忽略給定的文件夾?
我碰到下面的命令,這近做什麼,我需要:OSX bash的遞歸找到大小排序的文件除了在文件夾
find . -type f -print0 | xargs -0 ls -l | sort -k5,5rn > ~/files.txt
現在,我沒有什麼線索任何這意味着(會喜歡解釋,但不是那麼重要)。
我需要添加的一件事就是不要打擾特定的文件夾(即我有一個文檔文件夾與成千上萬的Word文檔,這使得這個命令需要很長的時間10s)。
任何人都可以建議除了上面的命令,會發現忽略給定的文件夾?
排除匹配*/Documents/*
路徑從find
:
find . -type f ! -path "*/Documents/*" -print 0 | ...
不同的期權或其他方式找到大文件:
find ~ -size +100M ! -path ~/Documents\* ! -path ~/Library\*
find ~ -size +100M | grep -v "^$HOME/Documents/" | while IFS= read -r l; do stat -f'%z %N' "$l"; done | sort -rn
shopt -s extglob; find ~/!(Documents) -type f -exec stat -f'%z %N' {} \; | sort -rn | head -n200
mdfind 'kMDItemFSSize>=1e8&&kMDItemContentTypeTree!=public.directory' | while IFS= read -r l; do stat -f'%z %N' "$l"; done | sort -rn
您也可以只使用搜索工具:
不幸的是,它是一個USB硬盤,上面有VHD磁盤映像,通過Parallels安裝。 Finder不顯示任何結果。如果我等了很久,也許會這樣,但沒有任何進展跡象。 – Dave
既然你問了一個解釋......
find . -type f -print0
這就是find
工具,它通過文件系統傳播找到符合你想要的東西。 .
本質上意味着它會嘗試找到任何東西,但是由於您指定了-type f
,它只會找到「常規文件」。正如您可能已經猜到的那樣,只需打印標準輸出的完整路徑(對管道有用)。它在每行的末尾使用空字符(而不是-print
,這將在短時間內相關)。
xargs -0 ls -l
xargs
需要從標準輸入事情的清單,然後利用什麼傳遞給它作爲參數執行給定的命令(「工具」)。在這種情況下,該實用程序是命令ls -l
,因此xargs從find
獲取結果並在其上執行ls -l
,爲您提供長而完整的路徑;這基本上只是一種將文件列表轉換爲大小等信息的文件列表的方法。 -0
選項允許xargs將空字符解釋爲行之間的分隔符,它們幾乎存在(幾乎?)以允許它與上面的-print0
選項一起使用。
sort -k5,5rn > ~/files.txt
sort
很酷。它排序的東西。 -k
告訴它要排序的列,在這種情況下是列5(僅列5)。 rn
位表示使用數字排序並顛倒順序。底部的默認值是最大的,所以這首先是最大的。如果使用ls -lh
使用單位後綴(B,K,M,G等),則數字排序可能會引起混淆。
非常感謝!勞裏的答案是徹底的,但你的回答正是我問到的問題的答案。 – Dave