現在の作業ディレクトリのすべてのサブディレクトリ名を一覧表示するシェルスクリプトがあります。名前にスペースがあるディレクトリが最初に表示され、その後に別のディレクトリが表示されるように名前をソートする方法はありますか?
これは私のスクリプトです。
#! /bin/bash
#search for files in a given directory
for file in $*
do
ls -1p | tr '/' ' '
done
これが生成する出力は次のとおりです。
A7 Provided
a7q3.log
a7q4.log
A7 Starters
lsdir1.sh
lsdir.sh
次のような出力を生成する方法はありますか?
A7 Provided
A7 Starters
a7q3.log
a7q4.log
lsdir1.sh
lsdir.sh
ベストアンサー1
ソート順序は、次の要素によって決定されます。LC_COLLATE
ロケール設定。ほとんどの言語は辞書と同じ順序で照合順序を設定します。最初のソートは大文字と小文字を区別せず、英数字以外の文字(スペースなど)を無視します。照合順序をC
コードポイントごとに厳密に変更することで、空白が印刷可能なすべての文字の前に来、すべてのラテン大文字が他のすべての文字の前に来ます。
LC_COLLATE=C ls -1
または
LC_ALL=C.utf8 ls -1
スクリプトの多くは意味がありません(単語リストと引数の拡張パターンを繰り返す、ループ本文でループ変数を使用せずに繰り返し、行末にスラッシュのみを出力するls
方法で呼び出し、次にそのスラッシュを空白に置き換えます。)何を望んでいるのか分からないので、この問題をどのように解決すべきかを申し上げることはできませんが、これにならなければならない$*
場合"$@"
や、$*
話になる場合はほとんどないということは申し上げます。"$*"
$@