FreeBSDのコンソールでfind
オプション-exec
(例find . -exec sha1 {} \;
:)を使用しています。
> >>や&など、execコマンドまたはfindコマンドに構文的に適用されるリダイレクトやその他の実行制御シンボルを正しく配置するにはどうすればよいですか? |それ以外の場合、
find
私はコマンドがありますか?exec
同じトピックで、
tee
コンソールでview-execコマンドの出力を使用して(進行状況を観察するために)ファイルに追加する(後で使用するために)構文は何ですか?
(シェルが多様であることを知っていますが、最も一般的に使用されるシェル(例:sh / csh)は非常に似ていると思いますか?)
修正する:
find -exec
ある時点で、スクリプトなしで簡単なコマンドでネストを実行できるかどうかを知りたいです。問題を引き起こすユースケースは次のとおりです。
- 外部
find
: DIR_MATCH_TEXT に一致するすべてのサブディレクトリを検索します。DIR1
- inside
find
: 外部ループ (DIR2 と呼ばれる) で見つかった一致する各サブディレクトリに対して次のコマンドを実行します。find DIR2 -name "FILE_MATCH_TEXT" -exec sha1 {} \; >> DIR1/DIR2_hashes.txt
find -exec
目的は、そのサブディレクトリへの一部のジョブの出力を含む一致するサブディレクトリにそれぞれ対応するファイルセットを作成することです。
つまり、およびを/backups
含めると、結果は、すべての.pdfファイルの出力と、すべての.pdfファイルの出力を含む2つのファイルになるということです。/jan2017
/feb2017
/backups/jan2017_hashes.txt
/backups/feb2017_hashes.txt
jan2017_hashes.txt
sha1
/backups/jan2017
feb2017_hashes.txt
sha1
/backups/feb2017
これまでの答えを見ると、 ? への引数としてfind
シェルを使って外部を呼び出す必要があると思います。-exec
ベストアンサー1
I / Oリダイレクトとパイプはbashなどのシェルの機能です。find
コマンドのソースコードを見る(https://www.gnu.org/software/findutils/)、この-exec
オプションは与えられたコマンドを直接分岐して実行し、シェルを介して転送しません。したがって、.without helpパラメータにパイプとリダイレクトを含めることはできませんfind
。
ただし、find
シェルを呼び出し、シェルに順番にコマンドを呼び出すことができます。シェルを介して同じタスクを実行すると、シェルが提供するI / Oリダイレクトタスクにアクセスできます。たとえば、次のことを考えてみましょう。
find . -type f -exec bash -c 'ls -l "$1" >> /tmp/result' find-sh {} \;
ls -l
で見つかった各ファイル(このコンテキストでは、シェルはファイルを参照)で実行され、出力をにリダイレクトします。ここでは、 find が各ファイルに対してシェルを呼び出すので、各結果が前の結果を上書きし、最後のコマンドの出力のみを含むファイルが生成されます。find
$0
/tmp/result
>>
>
>
パイプも動作しますが、「ファイルごとに1つのランチャー」という同じ警告があります。
find . -type f -exec bash -c 'ls -l "$1" | grep something' find-sh {} \;
それにもかかわらず、 のコンテキストでリダイレクトを適用する理由や-exec
find 自体の出力に対してリダイレクトを行うと、何が得られるかは明らかではありません。