jdupes
重複ファイルの管理に使用するunRAIDサーバーがあります。ユーザースクリプトを設定しましたjdupes -rL /dir1 /dir2
。ただし、ユーザースクリプトのログは表示されませんjdupes
。
jdupes
出力は端末で動作します。stdbuf -oL jdupes -rL /dir1 /dir2 >output.txt 2>&1
スクリプトから呼び出すと、output.txtに私が確認する必要があるデータが含まれます。
ただし、どちらの方法もユーザースクリプトでは機能しません。私も試しました
output=$(stdbuf -oL jdupes -rL /dir1 /dir2 2>&1)
echo $output
blah=42
echo $blah
42
私が試した他のタスクには、一時ファイルに書き込んで再読み込みして出力をログに反映すること(一時ファイルは作成されましたが記録されません)、ユーザースクリプトのログに直接書き込むことなどがあります。 file(出力なし)とtee
ファイル(ファイルは作成されましたが空です)。
これらのメソッドはすべて端末から呼び出されると機能します。私はこれがunRAIDユーザースクリプトとjdupesの間の対話に関連する問題だと思いますが、どんなアドバイスでも役に立ちます。
修正する:
したがって、標準出力jdupes
は次のようになります(私の意見を含む)。
Scanning: x files, y items (in d specified) # line 1
Progress [i/j, k pairs matched] n% (confirm: m%) # line 2
# output lines (I want to log these)
[SRC] /dir1/file1
----> /dir2/filex1
[SRC] /dir1/file2
----> /dir2/filex2
端末で実行すると、1行と2行が端末に表示され、実行中に更新されます。実行が完了すると、ライン1と出力ラインが表示されます。
端末で実行して同様のファイルにリダイレクトすると、jdupes -rfL /dir1 /dir2 >> output.txt
実行中に行1と行2が端末に表示され、完了後に行1が端末にあり、出力行はoutput.txtにあります。これが私が望むことです。
ただし、ユーザースクリプトで実行すると、ログファイルには何も表示されません。 Chrisの答えにある方法では、実行中にログファイルに更新され続ける行1と2が表示されますが、スクリプトが完了するとログファイルは空白になります。ライン1もなく、ライン2もなく、出力ラインもありません。出力ラインをログファイルに個別に表示したいと思います。
これが私の質問と意図をより明確にすることを願っています。