さて、これは私を少し狂気にします。
サブディレクトリセットのファイル数を表示しようとしています。
find . | wc -l
サブフォルダーとファイルの数を正しく返します。
ただし、時計画面にwatch 'find . | wc -l'
戻ります。二重引用符または逆引用符(`)と同じ値を返します。
watch: find . | wc -l: No such file or directory
これは古代バッシュバージョン:
GNU bash, version 3.00.16(2)-release (i486-slackware-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
これは組み込みデバイスなので、BusyBox v1.1.0 (2010.06.14-02:47+0000) multi-call binary
通常のGNUユーティリティの代わりにbusybox()を実行するため、最も一般的に使用されているツールのほとんどのスイッチや機能も存在しません。
したがって、これを考慮する必要があります。ただし、Linuxのインストールはモジュールディスクに書き込まれているため、簡単に更新する方法はありません。
同じコマンド(watch 'find . | wc -l'
)は最新のLinuxインストールでもうまく機能するので、この質問は古いbashを処理することに関するものです。他の場所が合うようですね!)。
答え1
実装/バージョンによっては、watch
コマンドラインを解釈するためにシェルを起動せずに、代わりに引数として受け取る引数を使用するコマンドを実行できます。したがって、この場合、シェルのコマンドラインを実行するために必要な場合は、次のように明示的にシェルを起動する必要があります。
watch sh -c 'find . | wc -l'
inotifywait -rm .
ディレクトリのアクティビティを監視するためのコマンドも参照してください(Linuxの場合)。
また、ファイル名に改行文字が含まれていない場合は、ファイル数find . | wc -l
(項目を除く)のみが返されます。..
これが問題になる可能性がある場合は、次のことができます。
find .//. | grep -c //
また、名前付きGNUまたはUnixユーティリティがないことに注意してくださいwatch
。 Linuxツールバーにはコマンドがあり、watch
busyboxにはprocps
実装があります。watch
BSDではwatch
全く違うことをしてみてください。watch
標準コマンドではありません(POSIX、Unix、またはLSB仕様の一部ではありません)。