ディレクトリとファイルの並べ替え

ディレクトリとファイルの並べ替え

find応答を使用してソートしたいです。私は単純なパイプラインがfind ... | sortそれを行うと思いましたが、ソート動作は変です。作業を簡単にするには、単純なテキストファイルを使用してください。

asdf/2/22
asdf/2/01
asdf/20/0
asdf/20/1

私の予想結果は

asdf/2/01
asdf/2/22
asdf/20/0
asdf/20/1

または

asdf/20/0
asdf/20/1
asdf/2/01
asdf/2/22

ディレクトリがグループに表示されるようにしたいので、重要ではありません。

私の試みは次のとおりです。

[root@linux6 ~]# cat sort_test | sort
asdf/20/0
asdf/2/01
asdf/20/1
asdf/2/22
[root@linux6 ~]# cat sort_test | sort -d
asdf/20/0
asdf/2/01
asdf/20/1
asdf/2/22
[root@linux6 ~]# cat sort_test | tr "/" "X" | sort
asdfX20X0
asdfX20X1
asdfX2X01
asdfX2X22
[root@linux6 ~]# cat sort_test | tr "/" "_" | sort
asdf_20_0
asdf_2_01
asdf_20_1
asdf_2_22
[root@linux6 ~]#

「X」でのみ機能することに注意してください。英数字以外の文字があると、出力が破損しているようです。私も出力に変化のないオプションを-s試しました。-t '/'

sortソートする-d項目がないと言っても、英数字以外の文字が最初に削除され、次に行がソートされるようです。alias

[root@linux6 ~]# which sort
/usr/bin/sort
[root@linux6 ~]# uname -a
Linux i-epg-appl1 3.10.0-229.14.1.el7.x86_64 #1 SMP Tue Sep 15 15:05:51 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@linux6 ~]# sort --version
sort (GNU coreutils) 8.22

ベストアンサー1

まず、/ロケールで並べ替えると無視されます(ほとんどのロケールでコレクション仕様の最後の重みを除くすべての項目はGNUシステム(私のDebianシステム)にあることがわかります)。/したがって、ソート基準はソートと同じです。 、まるであなたが使用したことがあるかのように。IGNORE<U002F> IGNORE;IGNORE;IGNORE;<U002F> # 45 //usr/share/i18n/locales/iso14651_t1_commonasdf/20/0asdf/2/01asdf200asdf201-d

ロケールをCに変更できます。ここで、ソートはバイト値のみに基づいています(/ソートが発生する場合もあります)。今後数字)なので、以前と同じように並べ替えられていますが、たとえば依然として異議申し立てのasdf/2/01問題があります。asdf/20/0/0asdf/2asdf/10

-gここでは、GNU固有の/オプションを使用する--general-numeric-sortか、次のことができます。

sort -nt/ -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 -k6,6 -k7,7 -k8,8 -k9,9

各ディレクトリコンポーネントを数値として扱います(これにより、前に2_がソートされます)。

を使用すると、zsh次のことができます。

printf '%s\n' **/*(Dn)

再帰的なグローバル数値ソートを実行します。

おすすめ記事