製品の一部として複数のスクリプトが提供されます。
スクリプトの1つで動作しない次の行が見つかりました。
find . -name *.old -type f -mtime +7 | xargs compress -f
file
*.old ファイルのいずれかでコマンドを実行すると、次の結果が表示されます。ASCII text, with very long lines
何ができるかを提案してもらえますか?
答え1
このコマンドの出力は、コマンドシーケンスが失敗した理由とは関係ありませんfile
。file
元のコマンドの出力に加えて、find
最も興味深いのは次の出力です。
find . -name *.old -type f -mtime +7
エコーされたファイル名がない場合はcompress
引数なしで呼び出されるため、標準入力を待ちます。ファイル名にスペースが含まれていると、xargs
ファイルを圧縮する際に問題が発生する可能性があります。
少なくとも、次のように変更してください。
find . -name "*.old" -type f -mtime +7 -print0 | xargs -0 --no-run-if-empty compress -f
OPコメントに基づいて更新すると、次のようになります。
find . -name "$FILE" -type f $ACTION_TYPE +$PARAM -print0 | xargs -0 --no-run-if-empty compress -f
forは、スペースを含むファイル名が圧縮に正しく渡されるよう-print0
にしますfind
。-0
ファイルがまったく見つからないと、実行はブロックされ
ます。--no-run-if-empty
xargs
compress