私は現在、「tex」で終わるファイルをいくつかのディレクトリ(およびサブディレクトリ)で検索し、それらを1つの一貫したテキストにまとめるために、短い検索コマンドを使用しています。私が使用するコマンドは次のとおりです。
find . -name '*.tex' -exec cat {} \; > blub.txt
ただし、findコマンドは、フォルダーを検索する方法では検索しません。それはたくさん飛び回って、最初にフォルダ「2011」をつかむ代わりに、「2013」などで始まります。2011とその中のサブディレクトリ、つまりフォルダ「01」で始まるように修正する方法はありますか? -1月」、「02- 2月」など。
このようなものが機能する可能性があります:
find -type f -name \*.tex -print0 | sort -z | xargs -0 cat >> blub.txt
find
のprint0
オプションは、NUL
文字を使用して、見つかったオブジェクトを区切ります。これをsort -z
で利用して、辞書式順序にすることができます。次に、その順序付きリストをxargs
にフィードします。
合計ディレクトリが多すぎない場合は、コマンドラインですべてのパスを指定することにより、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
がそれらを順番に処理するように強制されます。