2017-02-11 52 views
3

我正在尋找一種方式來修改這種方式,LS輸出前顯示[+],每一個目錄顯示[+]在目錄名的前面。理想的做法是通過bashrc。修改LS輸出到目錄

[email protected][~]$ ls 
[+]directory   [+]directory 
[+]directory   file.png 
file     file.txt 
readme 

目前,我只是自定義色彩輸出:

LS_COLORS=$LS_COLORS:'di=1;37;4' ; export LS_COLORS 
+2

目前已經不* *幾乎你想要的一個選項:'LS -F'附加不同的符號來不同的文件類型,如'/'到目錄,'*'到可執行文件,'@'符號鏈接等等。 –

回答

2

這可以幫助你,但它給你只有一列輸出:

ls | sed -r "$(find -maxdepth 1 -type d | cut -d/ -f2 | sed "1 d; 2~1 { s:.*:s/^\\(&\\)$/[+]\\\\1/;:g}")" 

它通過管道輸出lssed,並且sed腳本是使用管道動態構建的,該管道將目錄列表轉換爲列表S/^dirname$/[+]dirname/; sed腳本l INES。

只需單獨嘗試所有部件以瞭解其工作原理。

例如在/ etc輸出開始運行時,喜歡這樣的:

[+]acpi 
adduser.conf 
[+]adobe 
[+]akonadi 
aliases 
aliases.db 

你可能想在你的.bashrc別名命令。

你可能想看看tree命令。

+3

可以添加管道到列 – setempler

+1

您可以用'-C'強制輸出列,但由於單個單詞的長度發生了變化,它可能會混淆標籤對齊。 –

+2

如果文件名包含換行符,這將失敗,就像所有嘗試解析'ls'的輸出一樣。 – chepner

2

您可以使用:

ls -l:目錄將開始d。 ls -p:斜槓將被添加到像dir目錄名稱/
ls -F:也將dir名稱和其他標識爲其他文件類型(*等)後,添加斜線
ls -d */:如意見建議,將只列出目錄名稱以斜槓結尾。刪除-d以查看子目錄內容。

在操縱LS輸出方面,你可以去這樣的:

ls -l |awk '/^d/{print "[+]"$NF}; /^[^d]/{print $NF}' |column 

您還可以使用find和避免解析ls以來一直表示,解析LS有可能打破,如果文件名包含奇怪的字符如新線等。
find這種格式會產生輸出等同於上面ls

find . -maxdepth 1 -printf '%Y %f\n' |awk '/^d/{print "[+]"$NF}; /^[^d]/{print $NF}' |column 
+0

NIce。比我想出來的更優雅。 –

+0

如果您只想查看目錄,請使用'ls * /';不需要解析'ls'的輸出。 – chepner

+2

@chepner好的提示。只是爲了記錄,'ls * /'也會擴展目錄內容,並且屏幕變得混亂。可以用'ls -d * /'限制顯示只有目錄名稱。 –

1

你也應該嘗試這使用bash腳本

#!/usr/bin/env bash 

myls() { 
    for i in *;do 
     [[ -d "${i}" ]] && { 
      printf "%s\n" "[+] ${i}" 
      continue; 
     } 
     printf "%s\n" "${i}" 
    done 
} 

源代碼在您的.bashrc文件中的腳本。無論何時你想使用這個,只需在目錄中調用myls

你要注意,它不會給你一個彩色輸出