ファイルを分割して生成されたファイル数を確認する

ファイルを分割して生成されたファイル数を確認する

次の行を使用してファイルをより小さな部分に分割します。

split --line-bytes=100M -d $input $output/FILENAME
echo "$input was split into ??? 100MB files." >> demo.log

その後、この分割によって生成された小さなファイル数をログファイルに書き込む必要があります。これを行う方法はありますか?

答え1

最も簡単な方法は、結果のフラグメント名を次のように配列に保存することです。

splitarr=($output/FILENAME*)

を使用して配列の長さ(要素数)を取得します${#splitarr[@]}。これは、パターンに一致する唯一のファイル名がコマンドsplitによって生成されたファイル名であると仮定します。


使っているようなgnu splitので他の方法もあります。オプションを追加して--verbose(詳細についてはページを参照)、man印刷された行数を数えて変数に保存できます。splitstdout

ct=$(split --verbose --line-bytes=100M -d $input $output/FILENAME | wc -l)

あまり知られていないオプションを使用して同じ結果を得ることができます--filter

ct=$(split --filter='printf %s\\n;cat >$FILE' --line-bytes=100M -d $input $output/FILENAME | wc -l)

splitまたは、次の数秒以内にユーザーのコマンドだけがそのディレクトリにファイルを生成することがわかっている場合は、次のようにイベントに関する統計を収集するためにN使用できます。inotifywatchclose_write

inotifywatch . -t 20 -e close_write

現在のディレクトリのイベントは次の20秒間監視され、次のclose_write出力が出力されます。

Establishing watches...
Finished establishing watches, now collecting statistics.
total  close_write  filename
11     11           ./

したがって、テーブルからその数を抽出するだけです(たとえば、パイプへの接続awk 'END{print $2}';最初の2行が印刷されることに注意してくださいstderr)。

関連情報