特定のディレクトリの絶対パスを取得し、圧縮のためにGNUにパイプする次のスクリプトがありますparallel
。信号13エラーが発生し続けるが、理由がわからない。
find $directory -maxdepth 1 | \
grep -v "^${directory}$" | \
xargs realpath | \
parallel -j 4 zip -r ${new_directory}/{/.}.zip {}
エラーはですterminated with signal 13; aborting
。時にはエラーは発生しませんが、zipファイルが出力に存在しないことがありますnew_directory
。
どんな助けでも大変感謝します。
答え1
経験している実際のエラーを解決する前に、いくつかの極端なケースを処理するためにコマンドでいくつかの問題を修正する必要があります。
find "$directory" -maxdepth 1 -mindepth 1 -print0 | \
xargs -0 realpath | \
parallel -j 4 zip -r "$new_directory"/{/.}.zip {}
変更は次find
のとおりです。
-mindepth 1
- これにより、最上位ディレクトリが除外されるため、コマンドは不要ですgrep -v
。-print0
- これにより、スペースやエスケープ文字を含むファイルで発生する可能性がある問題を解決します。すべてのファイルは、新しい行ではなく null 文字で区切られます。
そのため、NULL文字で区切られた入力を読み取れるようにコマンドに-0
追加する必要があります。xargs
その他のトラブルシューティング
問題が解決しない場合は、さらにデバッグする必要があります。
まず、
parallel
コマンドを完全に削除し、コマンドへの入力が期待どおりであることを確認します。問題がなければ、
parallel
コマンドに詳細を追加して、実行中の操作を正確にキャプチャします。
parallel -t -j 4 zip -r ${new_directory}/{/.}.zip {} 2> parallel.log
- これにより、ファイルで実行されたコマンドのリストが表示されます
parallel.log
。zip
コマンドが正しく生成されたことを確認してください。
- ログファイルのコマンドリストにまだ例外が表示されない場合は、
zip
ファイルのコマンドを試してください。
bash -x parallel.log
プロセスのある時点でエラーが発生したステップを確認する必要があります。