最終変更日に基づいてディレクトリ内のファイルを再帰的にソートします
私は自分のディレクトリ内の多くのファイルを変更しましたが、最終更新日でソートすることによってそれらのファイルが何であるかを知りたいので、一部の拡張子を除外します
svnディレクトリには、ソートに表示したくない.svnファイルもたくさんあります
find -printf "%TY-%Tm-%Td %TT %p\n" | sort -n
のようなものを与えます
2014-03-31 04:10:54.8596422640 ./foo
2014-04-01 01:02:11.9635521720 ./bar
Bashでは、最初にshopt -s globstar
を実行します。 ksh93では、最初にset -o globstar
を実行します。 zshでは、すでに設定されています。
ls -dltr **/*
システムのコマンドラインの長さの制限を超えるほど多くのファイルがある場合、これはエラーを返します。 zshでは、代わりにこれを使用できます。
print -rl -- **/*(Om)
ディレクトリ構造をフラットにしたい場合(つまり、ファイルが存在するディレクトリを無視して、すべてのディレクトリ内のすべてのファイルで日付順にソートします)、@ yetiによって提案されたfind
-アプローチは、進むべき道です。ディレクトリ構造を維持したい場合は、
$ ls -ltR /path/to/directory
これは、ディレクトリに基づいてソートします。
あなたが使用していると仮定すると、GNU見つけてみてください:
find $SOMEPATH -exec stat -c '%Y %n' '{}' + | sort -n
最近のGNUツールを使用してのみファイル名を確実にリストするには:
find . -printf '%A@ %p\0' |
sort -nz |
sed -z 's/^[^ ]* //' |
tr '\0' '\n'
find $DIR -depth -maxdepth 3 \
-type d -readable -printf \
'printf "\\n%p\\n"
ls -t --color=always "%p"\n' |\
. /dev/stdin 2>&-
ls
が受け取る引数はリストしたいディレクトリの名前だけなので、これにより引数リストの問題が回避されます。好きなようにこれを行うことができます。
シェル. sources
|pipe
シェルスクリプトとして-同じプロセスであり、execve
が呼び出されたときに発生する可能性のある問題はありません。
いずれにせよ-上記は3つの深さしかありませんmaxdepth
。を変更することで調整可能です-=最初に深いので、から現在のディレクトリに戻りますdepth
。
$LSCOLORS
-私のマシンでは、きちんと印刷された列と、その他に必要なすべてのものを提供しますls
-または、さらに言えば、あなたが望むと思うものなら何でも. source.
繰り返しますが、これはls
。を使用して期待するすべてのことを実行するため、非表示にする.svn
ファイルはls
行を次のように変更するだけです。
ls -t --color=always --hide="*svn" "%p"\n
または、すべてのフォルダの拡張子svn
を見たい場合はBUT ./svn
コマンド全体を次のように変更できます。
find $DIR -depth -maxdepth 3 \
-type d -readable -printf \
'printf "\\n%p\\n" ; hide=
[ "%p" = "./svn" ] && hide="*svn"
ls -t --color=always --hide="$hide" "%p"\n' |\
. /dev/stdin 2>&-
個人的には、lsの-s
そして、もし気にすれば-u
は、MOD時間ではなくアクセス時間でソートします。
これは<dir>
内のすべてのfiles
をリストし、一番上のものが最も古い変更されます
find <dir> -type f -print0 | xargs -0 ls -ltr
そしてこれにより、最新の修正が最上位になります
find <dir> -type f -print0 | xargs -0 ls -lt
これが機能するのは、ファイル名のリストがシステムのコマンドラインの長さの合計制限を超えていない場合のみです。