ls からの出力をソートしようとしています。私が行っている順序は次のとおりです。
- _ で始まる名前のディレクトリ
- + で始まる名前のディレクトリ
- すべてのソフト リンク (いくつかのドット ファイルを含む場合があります)
- 残りのすべての .files
- 残りのすべてのディレクトリ
- ほかのすべて
すべてがこれらの「サブリスト」内でアルファベット順にソートされます。現時点では、find コマンドを何度も使用して、上記の基準を満たすファイルを検索しています。次に、出力を find から sort にパイプし、ソートされたリスト全体を ls に渡します。
#!/bin/bash
find1=`find . -maxdepth 1 -name "_*" -type d -printf "%f\n" | sort`
find2=`find . -maxdepth 1 -name "+*" -type d -printf "%f\n" | sort`
find3=`find . -maxdepth 1 -type l -printf "%f\n" | sort`
find4=`find . -maxdepth 1 -name ".*" -type f -printf "%f\n" | sort`
find5=`find . -maxdepth 1 \( ! -name "." \) -name ".*" -type d -printf "%f\n" | sort`
find6=`find . -maxdepth 1 \( ! -name "_*" \) \( ! -name "+*" \) \( ! -name ".*" \) \( ! -type l \) -printf "%f\n"`
find="$find1 $find2 $find3 $find4 $find5 $find6"
ls -dfhlF --color=auto $find
これはスペースを含む名前を処理せず、全体的に少し過剰に見えます。これを行うためのより良い方法があると確信しています。何か案は?