Grep

ls |grep 作品不適用於 ls –color

  • February 2, 2016

我正在嘗試使用以下命令列出所有隱藏的目錄

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不了解尾隨,則以效率為代價+替換它。\;

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