web-dev-qa-db-ja.com

アルファベット順で検索を検索する

私は現在、「tex」で終わるファイルをいくつかのディレクトリ(およびサブディレクトリ)で検索し、それらを1つの一貫したテキストにまとめるために、短い検索コマンドを使用しています。私が使用するコマンドは次のとおりです。

find . -name '*.tex' -exec cat {} \; > blub.txt

ただし、findコマンドは、フォルダーを検索する方法では検索しません。それはたくさん飛び回って、最初にフォルダ「2011」をつかむ代わりに、「2013」などで始まります。2011とその中のサブディレクトリ、つまりフォルダ「01」で始まるように修正する方法はありますか? -1月」、「02- 2月」など。

1
miri queer

このようなものが機能する可能性があります:

find -type f -name \*.tex -print0 | sort -z | xargs -0 cat >> blub.txt

findprint0オプションは、NUL文字を使用して、見つかったオブジェクトを区切ります。これをsort -zで利用して、辞書式順序にすることができます。次に、その順序付きリストをxargsにフィードします。

1
DopeGhoti

合計ディレクトリが多すぎない場合は、コマンドラインですべてのパスを指定することにより、findにパスを順番にトラバースさせることができます。

shopt -s globstar
find **/ -name '*.tex' -exec cat {} \; > blub.txt

(再帰的な** globを有効にするためにbash構文を使用します)。 globは自然に並べ替えられた順序で展開されるため、年が最初に並べ替えられ、次に数字で接頭辞が付けられた各月が毎年の中で並べ替えられます。末尾のスラッシュは、bashにディレクトリのみを返すように要求し、findにファイルを検索させます。

または、サブディレクトリとして年のリストがある場合は、それをループすることができます。

for year in *
do
  find "$year"/* -name '*.tex' -exec cat {} \;
done > blub.txt

これにより、毎年の12か月が各ループに拡張され、findがそれらを順番に処理するように強制されます。

1
Jeff Schaller