ディレクトリから特定の数の最大ファイルを削除したいと思います。
以下を使用して上位10個のファイル名を取得できます。
ls -S | head
(またはより豊富ですが、より複雑な解析ls -lS | head
)
rmにどのように渡すのですか? xargsを介して?
それでls -S | head | xargs rm
動作します(ファイル名にスペースなどがありますか?)。
より良い/安全な方法はありますか?
申し訳ありません。間違えるかどうか直接テストすることはできません(ディレクトリには削除したくない項目があります)。
私はmacOSを使用しています。
ベストアンサー1
それで
ls -S | head | xargs rm
動作します(ファイル名にスペースなどがありますか?)。
いいえ。xargs
デフォルトでは、改行文字だけでなくすべてのスペースに分割されます。そして、すべての引数がスペースで区切られて印刷される| xargs echo
ため、これは表示されません。echo
(このような方法は改行| xargs printf "%s\n"
で区切って印刷するため、ファイル名の途中で分割が発生するかどうかを確認できます。)
少なくとも、GNU xargsは-d '\n'
改行文字に分割する必要があり、多くのバージョンのxargsは-0
NUL文字(と連携してfind -print0
)に分割する必要があります。少なくとも最初の項目が必要ですが、通常、ファイル名に改行文字を含めることもできます。この場合、head
大きな利点はありません。
私はあなたに警告する義務があります解析された出力はls
無効と見なされます。、改行文字がなくても、少なくとも一部のバージョンでは出力が中断されるようです。 (しかし、改行文字や印刷できない文字がなければ、おそらく安全でしょう。おそらく。)