「頭にパイプされたlsを完了するには非常に長い時間がかかります」と言います。
この原因はでなくls
、ディレクトリ内のファイルの数です。1つのディレクトリに100,000個のファイルがある場合、この問題を解決するには、すべての100,000個のファイルに関する情報を取得してから、それらのファイルの並べ替えや出力の印刷を検討する必要があります。
時間がかかりすぎる場合、実際の解決策は、ファイルを複数のディレクトリに分割することです。
ファイルを複数のディレクトリに分散できない場合、検討するファイルの数を絞り込む方法はありますか?たとえば、ファイル名に日付が含まれる場合、100,000個のファイルをソートする必要がないようにワイルドカードを含めることができます。それとも、連番が付けられているのでしょうか?(これは役立つかもしれませんが、試してみる価値があります。)
これを何回やろうとしていますか? たぶん、再利用のために出力を保存/キャッシュする価値があります。
さて、質問。
あなたは必ず、あなたが「変更時間」「作成時間」を意味していませんか?ほとんどのツールは、「作成時間」ではなく「変更時間」のみを表示できます。
「作成時間」を取得することは非常に新しいことであり、ext4ファイルシステムと、インストールが容易でないいくつかのツールが必要です。
時間を変えたい場合
変更時刻(略してctime)は、ファイルの属性が最後に変更された時刻を意味します。
ls -c
ctimeでソートします。
降順ではなく昇順で出力したいので、-r
オプションで出力を逆にする必要があります。
したがって、次のようにすることができます。
ls -cr | head -n 100
以下を使用した同じ問題に対するより長い解決策stat
:
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%Z\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
しかし、それはls -cr
私のシステムよりも遅くなります。
変更時刻が必要な場合
変更時刻(略してmtime)は、ファイルの内容が最後に変更された時刻を意味します。
ls -t
mtimeでソートします。
変更ls -cr
へls -tr
(最良のオプション)または変更stat -c $'%Z\t%n'
しますstat -c $'%Y\t%n'
。
作成時間が必要な場合
(略してcrtime)
これは難しいです。
最初に、ディレクトリがを使用してフォーマットされたファイルシステムにあることを確認しext4
ます。tune2fs -l <device name>
これを使用して確認できます。
次に、stat
と呼ばれる新しい形式%W
があります。これはここで役立ちます。入手するには、2010年10月以降にリリースされたGNU Coreutilsのバージョンをダウンロードし、抽出、コンパイル、およびインストールする必要があります。
次に、カーネルによっては、これが機能する可能性があります(試していません)。
find . -mindepth 1 -maxdepth 1 -exec stat -c $'%W\t%n' '{}' \; |
sort -k 1n |
cut -f 2 -d $'\t' |
head -n 10 |
sed -e 's/^\.\///'
こちらもご覧ください:
エラーが発生した場合 "'$\t'
'$\t'
表記は必要ですbash
かzsh
:それはでは動作しませんdash
かsh
Ubuntuで。あなたが本当にこれらのシェルを使用する必要がある場合は、いずれかを変更する必要があります\t
にCtrl+ V、Tabおよびリードを削除する$
だけでオープニング引用符の前から。
find -mtime +<number of days> -delete
の場合は、特定の年齢よりも古いすべてのファイルをクリーンアップするだけでいいかもしれません。つまり、並べ替えは不要です。