2016-05-10 8 views
2

私はスクリプトの一部がファイル/ディレクトリの配列を生成しており、ユーザが選択したことを確認するためにそれらを印刷しています。私は、lsのように、ファイルとは異なるディレクトリを色付けしたいと思います。Bash:条件付きカラー出力のテキスト

は現在、ここで私はデータを出力しています方法は次のとおりです。素晴らしい作品それ

printf ' %q\n' "${files[@]}" 

。私はprintfのカラー出力を変更するためにカラーコードを使用する方法を知っています、私はそれを条件付きにする方法を知りません。

少し簡単にするために、私はファイル出力を開始するために-pフラグを使用しています。したがって、すべてのディレクトリは/文字で終わります。繰り返しますが、私は、この特定の種類の条件付きロジックをどのように記述するのかを完全には確信していません。

ありがとうございます。

+0

ファイル/ディレクトリに使用する書式を保持する2つの変数を宣言し、次にリストをループし、 '[-d" $ i "] && printf" $ colorfmt "" $ i "|| printf "$ plainfmt" "$ i" '? –

+0

'-d'はもっと*高価です*' [["$ 1"〜* /]] '? (または、正確なシェルがcharと一致するものであれば)。そうでなければ、素晴らしいもの!答えとして投稿し、私はupvoteします。皆さんお元気で。 – shellter

答えて

0

これはそれを行う必要があります。

# input files 
files=$(ls -p) 

# array with formatted file names 
formatted_files=() 

# a few demo ANSI coloring codes 
ANSI_RESET=$(tput sgr0) 
ANSI_BOLD=$(tput bold) 
ANSI_GREEN=$(tput setaf 2) 

# iterate over input files, conditionally coloring 
# and appending to formatted files array 
for file in ${files[@]}; do 
    if [[ "$file" =~ /$ ]]; then 
     formatted_files+=("$ANSI_BOLD$file$ANSI_RESET") 
    else 
     formatted_files+=("$ANSI_GREEN$file$ANSI_RESET") 
    fi 
done 

# output (directories bold, files green) 
printf ' %q\n' "${formatted_files[@]}" 

ファイルを繰り返し処理、我々はbashの正規表現が二重括弧のテスト式の中に演算子を一致するディレクトリをテストします。ファイルがスラッシュで終わっている場合、ファイルは/$です。

私たちは、反復とテストにはbash internal/builtinコマンドのみを使用しているので、純粋なbashソリューションの場合はできるだけ速くする必要があります。

関連する問題