0

私は、alienoders.1206 のような Aliencoders.numeric-digits を持つすべてのファイルを選択する必要があり、find コマンドですべてのサブディレクトリも検索する必要があるシナリオが 1 つあります。そのようなファイルがない場合、何もしません。

私が書いた :

find /home/jassi/ -name "aliencoders.[0-9]+" | xargs ls -lrt | awk print '$9'

Aliencoders.xx で始まるファイルがない場合、そのようなファイルやディレクトリはありませんと表示されます...

このエラーを回避するにはどうすればよいですか。そのようないくつかのディレクトリに対して実行する必要があり、そのようなファイルパターンが存在するディレクトリのみに出力を与える必要があります。それ以外の場合は警告がなく、xargsなどは実行されません。

現在、そのようなファイルが存在しない場合、/home/jassi の代わりに現在のディレクトリ t find を取得します。

4

2 に答える 2

2

xargs入力が空の場合に実行したくない場合は、 manページで指摘されているように、-rまたはwhich が GNU 拡張機能を使用できます。したがって、そのサポートがある場合は、試すことができます または、オプションを 使用して、これらの行でこれを達成することもできます これが役立つことを願っています!--no-run-if-empty
find /home/jassi/ -name "aliencoders.[0-9]+" | xargs -r ls -lrt | awk '{print $9}'
execfind
find /home/jassi/ -name "aliencoders.[0-9]+" -exec ls -lrt {} + | awk '{print $9}'

于 2012-06-18T17:37:10.343 に答える
1

バッシュ

次のコマンドを試してください (bashほとんどの人がシェルの下で使用し、シェルは指定されていないため):

find /home/jassi/ -name "aliencoders.[0-9]+" 2>&1 | xargs ls -lrt | awk '{print $9}'

エラー メッセージをから にリダイレクト2>&1しています。この単一の出力ストリームを取得したら、パイプなどで処理できます。stderrstdout

このリダイレクトがなければ、エラー メッセージstderrが引き続きコンソールに送られ、出力が乱雑になりstdout、パイプによって処理されるだけでした。

リダイレクトに関するすべてでは、リダイレクトに関する詳細と制御が提供されます。

更新

tcsh :

の使用に基づいてtcsh(使用しているのは私だけだと思う​​場合もあります)、次の構成でリダイレクトstderrすることができます。stdout

command |& ...

それで

find /home/jassi/ -name "aliencoders.[0-9]+" |& xargs ls -lrt | awk '{print $9}'

助けるべきです。エラー メッセージがパイプをバイパスしてコンソールに直接送信される前は、stdoutパイプによって処理されるだけでした。これにより、すべての出力がパイプを通過し、必要なものをフィルタリングできます。

awkまた、コマンドの最後に次のコマンドを使用することに注意してください。

awk '{print $9}'

最初に投稿したものとは異なります。

于 2012-06-18T17:32:53.823 に答える