次の行を使用してファイルをより小さな部分に分割します。
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
印刷された行数を数えて変数に保存できます。split
stdout
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
使用できます。inotifywatch
close_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
)。