Bash
遞歸查找最大文件
我正在嘗試以遞歸方式查找目錄中最大的文件。如果該目錄中有子目錄,則該函式需要進入該目錄並檢查是否存在最大的文件。一旦找到最大的文件,輸出就會顯示相對路徑名以及最大文件的名稱和大小。
前任:
dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test class/asn dude.h.gch: 9481628
這就是我所擁有的:
#!/bin/sh clear recursiveS() { for d in *; do if [ -d $d ]; then (cd $d; echo $(pwd)/$line; du -a; recursiveS;) fi done } recursiveS
我已經被困了一段時間了。我無法通過流水線化許多現有的 Unix 工具來實現這一點。任何想法都會很好!
使用
find
(這裡假設 GNUfind
)輸出具有文件大小的文件名。種類。列印出最大的一個。find . -type f -printf "%s\t%p\n" | sort -n | tail -1
假設文件路徑不包含換行符。
bash
在 GNU 實現中使用循環stat
:shopt -s globstar max_s=0 for f in **; do if [[ -f "$f" && ! -L "$f" ]]; then size=$( stat -c %s -- "$f" ) if (( size > max_s )); then max_s=$size max_f=$f fi fi done echo "$max_s $max_f"
這將比 find 解決方案慢得多。這還假設文件名不以換行符結尾,並且將跳過隱藏文件並且不會下降到隱藏目錄。
如果
-
目前目錄中有一個文件被呼叫,將考慮在標準輸入上打開的文件的大小。請注意,
bash
在下降目錄樹時,4.3 之前的版本會跟隨符號連結。