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

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

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

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

しかし、findコマンドは私が望む方法でフォルダを検索しません。たくさん飛びますが、「2011」フォルダを先にとる代わりに「2013」などで始めます。 2011年から始まり、その中のサブディレクトリが「01 - 1月」フォルダで始まり、次に「2月2日」フォルダで始まるように変更する方法はありますか?

答え1

ディレクトリ全体があまりにも多くない場合は、findコマンドラインにすべてのパスを提供して、パスを順次巡回するように強制できます。

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

(bash構文を使用して再帰globを有効にします**)。グローバルは自然な並べ替え順に展開されるため、年が最初に並べ替えられ、次に各数字の前に付けられた月が各年内で並べ替えられます。末尾のスラッシュは、bashがファイルを見つけるためにディレクトリのみを返すように要求しますfind

または、サブディレクトリに年のリストがある場合はそれを繰り返すことができます。

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

これは、1年の12ヶ月を各サイクルに拡張し、再びfind順次処理されるようにします。

答え2

次のように動作します。

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

print0のオプションは、find文字を使用してNUL見つかったオブジェクトを分離し、sort -zそれを語彙順に配置するために使用できます。次に、このソートされたリストをに入力しますxargs

関連情報