LoginSignup
1
3

More than 5 years have passed since last update.

find hogehoge | xargs ls -ltr を正しく動かす

Posted at

問題

  • findした結果をmtime順に並び替えたいとき単純に思いつく方法はfind hogehoge | xargs ls -lrtだが、対象のファイル数が多い場合は想定通りの出力にならない
    • find / | xargs ls -dltrを実行すれば、想定通りになっていないのがすぐ分かる

原因

  • コマンドライン引数の最長はARG_MAXで決まる
  • xargsは渡す引数の長さがARG_MAXを超える場合、自動的にコマンドを分割する
  • findの結果のファイル数が多い場合、xargsで渡す引数がARG_MAXを超え、そのたびにその引数毎に区切られてls -ltrが実行されるので、想定通りの結果にならない

解決方法

findのオプションを使ってmtimeを先頭に表示しsortにパイプで渡す。

find . -printf "%T+ %p\n" | sort

lsは標準入力やファイルから対象を指定することが出来ないため、lsを回避するしかない。printfでuidやファイルサイズ等も指定して表示できるので、大抵は事足りる。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3