再帰的にファイルを見つけて1つのファイルにリンクし、同時に元のファイルを削除する方法

再帰的にファイルを見つけて1つのファイルにリンクし、同時に元のファイルを削除する方法

私が理解する限り、私は使用できます

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

ディレクトリ内のすべてのテキストファイル(サブディレクトリを繰り返し探索)をというファイルにリンクします。問題は、元のファイルを保存するのに十分なall.txt空き容量がないことです。all.txtソースファイルをリンクして削除できるように、2つのコマンドを順番に実行する方法はありますかall.txt

答え1

最も一般的なアプローチは、次のアドレスに送信される単純な1行シェルコマンドを作成することですfind

find . -name "*.txt" -exec sh -c 'cat {} >> foobar && rm {}'

注:globは*.txt出力ファイルと一致しません。all.txt追加したファイル(私の場合)がglobと一致しない場合は、foobar極端なケースを回避できます。後で-name名前を変更してくださいfoobar

関連情報