
我一直在使用以下命令列出當前目錄下任意深度的十個最大檔案:
find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print $0}'
(我用awk
代替來head
防止管道破裂錯誤當列表太長時)
它運作良好,但顯然很難每次都記住和打字。我嘗試將其放入 .bash_aliases 中,但它不起作用(它會列印 10 個空白行)。
如果我使用less
而不是awk
,輸出會正確顯示,但這意味著顯示大於 10MB(我的下閾值)的整個文件列表,按大小排序,而不是僅顯示頂部的文件。
那麼,是什麼讓awk
choke 作為別名命令的一部分(假設這確實是問題),我能做些什麼來解決它?
答案1
使用此命令作為別名時,$0
不再受單引號保護,因此將轉換為您的 shell 名稱。這些命令演示了這一點:
$ alias F="echo '$0'"
$ F
bash
shell 名稱(大概bash
)剛好是未設定的awk變數名,導致空白行。
防止 shell 擴展的一種方法$0
是使用以下內容:
alias F="find -type f -size +1k -exec ls -gGsSh1 {} + | awk 'NR<=10 {print \$0}'"
但是,由於這$0
沒有用,您可以將其從awk
語句中刪除。
find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print}'
您可以進一步刪除整個區塊,因為列印所選行awk
無論如何都是預設行為:
find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10'
或者,您可以繼續使用head
並丟棄錯誤訊息:
find -type f -size +10M -exec ls -gGsSh1 {} + 2>&1 | head