![ファイル形式が決定しました[閉じる]](https://linux33.com/image/48861/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%BD%A2%E5%BC%8F%E3%81%8C%E6%B1%BA%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
製品の一部として複数のスクリプトが提供されます。
スクリプトの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