Grep
ls |grep 作品不適用於 ls –color
我正在嘗試使用以下命令列出所有隱藏的目錄
ls -lhAF1 | grep -E '^d.*[0-9]{2}:[0-9]{2} \.'
效果很好
正則表達式的說明:我正在嘗試獲取具有以下格式的所有行:d,然後是一些文本,然後是時間戳,然後是空格,然後是點,然後是更多文本
但是,當我嘗試使用此命令為 ls 輸出著色時:
ls --color -lhAF1 | grep -E '^d.*[0-9]{2}:[0-9]{2} \.'
它給出零結果,沒有的輸出
--color
是:drwxr-xr-x 1 使用者組 4096 Feb 1 08:48 .invisible
為什麼 ls / grep 會這樣?
--color
為顏色添加轉義序列。如果將輸出 (of ) 重定向到文件,則可以看到這一點ls --color
。這是它的樣子:
drwxr-xr-x 6 root root 4.0K Jan 9 08:23 ^[[01;34m.cabal^[[0m/
為了解決這個問題,試試這個:
ls -lhAF1 --color | grep -E '^d.*[0-9]{2}:[0-9]{2} .*\.'
解析
ls
通常是一個壞主意。經常,但並非總是如此。這是給您的另一個建議,它在將集合傳遞給ls
.find .* -maxdepth 0 -type d \( -name '.[^.]' -o -name '.??*' \) -exec ls -ld --color=always {} +
有人指出,原始程式碼實際上將目錄列表限制為過去六個月內修改過的目錄。這可以通過以下替代解決方案來處理。
find .* -maxdepth 0 -type d -mtime -180 -mtime +0 \( -name '.[^.]' -o -name '.??*' \) -exec ls -ld --color=always {} +
與以往一樣,如果您
find
不了解尾隨,則以效率為代價+
替換它。\;