ファイルリストにないファイルを見つけるには、grep行を作成してください。

ファイルリストにないファイルを見つけるには、grep行を作成してください。

これは何よりも難しいことです。一行で安全でエレガントに実行できますか?

最大の問題は、パターンとファイルの両方が失敗する可能性があるコマンドの結果であることです。

grep -Fxvf <(cmd-filter) <(cmd-list) | xargs -d "\n" gvfs-trash

  1. 間違ったパスが渡されると、cmd-filterは0で失敗するか、偽の空のリストを出力する可能性があります(偽のリモートls)。
  2. cmd-listは単に深い検索です。ここで失敗はすべて悪いわけではありません。オタでも、パイプで接続された出力を受け取る次のgvfs-trashプログラムが何も実行されないことを意味するからです。タイプミスによってエラーが発生した場合に便利です。

明らかに、主な問題は最初の問題です。何らかの理由で失敗したり、誤字が原因で空の場合、cmd-listで印刷されたすべてのファイルが削除されます。少なくとも私はこれを避けたいです。

cmd-filterが空の場合、grepが失敗しなければならないという内容をmanで読みましたが、grep -f上記ではこの現象は発生しませんでした。 cmd-filterに置き換えると、echo ""cmd-listのすべてのファイルがインポートされます。他の理由による失敗はどうなりますか?

編集:考えると、cmd-listにない行を取得するために一致を反転するために必要な-vスイッチが原因である可能性があります。それでは、空のパターンリストの逆一致がすべてであることを発見するのは奇妙だと思います。

とにかくエレガンスはおそらく不可能で、良い答えがないので、「ただ怠惰なスケルトンがスクリプトを作成するようにする」よりも、tmpファイルや類似のファイルを使用して正しい1行の核をマークします。

編集:私はこの挑戦に「失敗しました」時間がかかりました。Script(ab)はこれを達成するために変数とプロセスの置き換えを使用します。エラー状態とcmd-filterのstdoutが空であるかどうかを確認する必要がないことがわかりました。これはすべてのエラーケースでstdoutも空であるためです。

関連情報