私は現在、短い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
順次処理されるようにします。