unRAIDユーザースクリプトでjdupes出力をログに記録する

unRAIDユーザースクリプトでjdupes出力をログに記録する

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もなく、出力ラインもありません。出力ラインをログファイルに個別に表示したいと思います。

これが私の質問と意図をより明確にすることを願っています。

ベストアンサー1

おすすめ記事