web-dev-qa-db-ja.com

`ls`の出力をソートする方法は?

Titlepage_19.pdfの前にtitlepage_1.pdfでソートされたこの出力を表示することは可能ですか?

$ ls
allTitlepage.pdf         titlepage_12.pdf  titlepage_19.tex  titlepage_26.pdf  titlepage_32.tex  titlepage_4.tex
allTitlepage.tex         titlepage_12.tex  titlepage_1.pdf   titlepage_26.tex  titlepage_33.pdf  titlepage_5.pdf
assignment.pdf           titlepage_13.pdf  titlepage_1.tex   titlepage_27.pdf  titlepage_34.pdf  titlepage_5.tex
assignment.tex           titlepage_13.tex  titlepage_20.pdf  titlepage_27.tex  titlepage_34.tex  titlepage_6.pdf
graphicsAssignment2.pdf  titlepage_14.pdf  titlepage_20.tex  titlepage_28.pdf  titlepage_35.pdf  titlepage_6.tex
graphicsAssignment2.tex  titlepage_14.tex  titlepage_21.pdf  titlepage_28.tex  titlepage_35.tex  titlepage_7.pdf
README.md                titlepage_15.pdf  titlepage_21.tex  titlepage_29.pdf  titlepage_36.pdf  titlepage_7.tex
thesisTitlepage.pdf      titlepage_15.tex  titlepage_22.pdf  titlepage_29.tex  titlepage_36.tex  titlepage_8.pdf
thesisTitlepage.tex      titlepage_16.pdf  titlepage_22.tex  titlepage_2.pdf   titlepage_37.pdf  titlepage_8.tex
titlepage_0.pdf          titlepage_16.tex  titlepage_23.pdf  titlepage_2.tex   titlepage_37.tex  titlepage_9.pdf
titlepage_0.tex          titlepage_17.pdf  titlepage_23.tex  titlepage_30.pdf  titlepage_38.pdf  titlepage_9.tex
titlepage_10.pdf         titlepage_17.tex  titlepage_24.pdf  titlepage_30.tex  titlepage_38.tex  titlepage_one.pdf
titlepage_10.tex         titlepage_18.pdf  titlepage_24.tex  titlepage_31.pdf  titlepage_3.pdf   titlepage_one.tex
titlepage_11.pdf         titlepage_18.tex  titlepage_25.pdf  titlepage_31.tex  titlepage_3.tex   titlepage_two.tex
titlepage_11.tex         titlepage_19.pdf  titlepage_25.tex  titlepage_32.pdf  titlepage_4.pdf
13
alhelal

スイッチ-v [テキスト内の自然な並べ替え(バージョン)番号]を使用します

ls -v
30
Vijay

出力はソートされます。 lsマンページによると:

-cftuvSUXも--sortも指定されていない場合、エントリをアルファベット順にソートします。

ただし、さらに先に進みたい場合は、少なくとも2つのオプションがあります。

オプション1-lsソートスイッチ

man lsは、並べ替えに使用できるいくつかのスイッチについて説明します。具体的には、 ls man page は次のように述べています。

なし(-U)、サイズ(-S)、時間(-t)、バージョン(-v)、拡張子(-X)

あなたの場合、「バージョン」ソートが必要です(-v)。ただし、これもソートするため、注意してくださいblahblah-X.Y.Z-Aアレンジメントを持つものはすべて、あなたが望むものとは限りません。 GNUのバージョンソートの説明 も参照してください。

オプション2-ソートコマンドへのパイプ

パイプ|を使用して、出力を別のコマンドに送信できます。たとえば、commandsortls -1 | sort -nのように、ファイルに番号を付けている場合に便利なその他の方法。 -1スイッチは、出力がファイルごとに1行であることを保証します。

同様に、sedawkなどを使用して、出力を操作してソートを支援できます。

この種の質問に答える方法はたくさんあります。 Linux Shellチュートリアルが役立つ場合があります。

*(私がそこで行ったことを参照してください:-p)

13
tudor

コメントで既に指摘したように、出力isは既にソートされていますが、数字ではなく文字でソートされています。 lsの出力をsortにパイプすることもできます。この出力には、文字列内の数字でソートするスイッチがあります。

ls | sort --version-sort

manpage から:

-V, --version-sort
         natural sort of (version) numbers within text

欠点:lsを発行すると、tableに収まるだけの列数でファイルを出力します現在の画面(投稿で示したとおり)。しかし、lsが、その出力がファイルまたはパイプ(ls | sortのように)にリダイレクトされていることに気づいた場合、lsは、ファイルをone列に出力します。次に、出力が他のプログラム(sortなど)によって行ごと(ファイルごと)に処理されることを想定しています。したがって、ls | sort -V出力は、複数の列を持つテーブルではなく、1つの列になります。 @ vijay のシンプルだが 完全回答 を参照して、それを回避する方法を参照してください。

6
PerlDuck