Shell

為目錄後綴微調 LS_COLORS?

  • August 7, 2014

我可以在LS_COLORS. 我不需要幫助自定義不同文件後綴的顏色。我想做的是根據它們的後綴 為某些目錄配置特殊顏色。

(例如,我想dir1/以標準目錄顏色dir2.special-suffix/顯示,但以不同顏色顯示,我為名稱以 . 結尾的目錄設置了這種顏色.special-suffix。)

我嘗試使用標準*.«suffix»方法(與文件一起使用)來做到這一點,但沒有運氣。所有目錄都以 為 指定的顏色顯示di,並忽略任何後續*.«suffix»規則。

這甚至可能嗎?

可能不會,儘管這也可能讓開發人員感到驚訝。這是摘自GNU 的 ls.c 的評論:

#   /* Extensions only apply to regular files, apparently. */

這是完整ls.c原始碼的連結,您會在其中找到相同的內容,儘管它可能不太好讀。

值得注意的是,儘管您可以根據目錄的模式和/或根據它們的連結狀態獲得一些顏色的交替。當然,這樣的事情就等於為了記者而改變報導的內容,但我不是哲學家;所以這是您可能的一種方法:

mkdir t_not_other_writable
mkdir x_not_other_writable
chmod o+t t_not_other_writable 
LS_COLORS='lc=:rc=:rs=:di=FG=BLD;CLR=BLUE :st=FG=REV;CLR=BLUE :' \
   /usr/bin/ls --color=always -nFl

輸出

drwxr-xr-x 1 1000 1000 0 Aug  7 14:37 FG=BLD;CLR=BLUE x_not_other_writable/
drwxr-xr-t 1 1000 1000 0 Aug  7 14:36 FG=REV;CLR=BLUE t_not_other_writable/

為了確保這樣的事情不是一個可笑的危險想法,我與穀歌仔細檢查了粘性位的作用:

粘性位是在文件或目錄上設置的權限位,僅允許文件/目錄的所有者或 root 使用者刪除或重命名文件。沒有其他使用者被授予刪除其他使用者創建的文件的權限。

因此,如果我們談論的是您的目錄,而這些目錄不是您打算讓其他人首先刪除的東西,那麼可能不會造成任何傷害。

PS如果您對那裡的定義感到好奇,我在這裡$LS_COLORS很好地介紹了它*(我希望)* 。我還從下面的原始碼中粘貼了更多評論,我希望您會發現這些評論與將為您提供的輸出很好地對齊*(對於那些它也很難定義的評論)*:dircolors -p

#   /* lc: Left of color sequence */
#   /* rc: Right of color sequence */
#   /* ec: End color (replaces lc+no+rc) */
#   /* rs: Reset to ordinary colors */
#   /* no: Normal */
#   /* fi: File: default */
#   /* di: Directory: bright blue */
#   /* ln: Symlink: bright cyan */
#   /* pi: Pipe: yellow/brown */
#   /* so: Socket: bright magenta */
#   /* bd: Block device: bright yellow */
#   /* cd: Char device: bright yellow */
#   /* mi: Missing file: undefined */
#   /* or: Orphaned symlink: undefined */
#   /* ex: Executable: bright green */
#   /* do: Door: bright magenta */
#   /* su: setuid: white on red */
#   /* sg: setgid: black on yellow */
#   /* st: sticky: black on blue */
#   /* ow: other-writable: blue on green */
#   /* tw: ow w/ sticky: black on green */
#   /* ca: black on red */
#   /* mh: disabled by default */
#   /* cl: clear to end of line */

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