web-dev-qa-db-ja.com

最終変更日に基づいてディレクトリ内のファイルを再帰的にソートします

最終変更日に基づいてディレクトリ内のファイルを再帰的にソートします

私は自分のディレクトリ内の多くのファイルを変更しましたが、最終更新日でソートすることによってそれらのファイルが何であるかを知りたいので、一部の拡張子を除外します

svnディレクトリには、ソートに表示したくない.svnファイルもたくさんあります

11
Danny
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

18
n.st

Bashでは、最初にshopt -s globstarを実行します。 ksh93では、最初にset -o globstarを実行します。 zshでは、すでに設定されています。

ls -dltr **/*

システムのコマンドラインの長さの制限を超えるほど多くのファイルがある場合、これはエラーを返します。 zshでは、代わりにこれを使用できます。

print -rl -- **/*(Om)

ディレクトリ構造をフラットにしたい場合(つまり、ファイルが存在するディレクトリを無視して、すべてのディレクトリ内のすべてのファイルで日付順にソートします)、@ yetiによって提案されたfind-アプローチは、進むべき道です。ディレクトリ構造を維持したい場合は、

$ ls -ltR /path/to/directory

これは、ディレクトリに基づいてソートします。

5
Andreas Wiese

あなたが使用していると仮定すると、GNU見つけてみてください:

find $SOMEPATH -exec stat -c '%Y %n' '{}' + | sort -n
3
user62916

最近のGNUツールを使用してのみファイル名を確実にリストするには:

find . -printf '%A@ %p\0' |
  sort -nz |
  sed -z 's/^[^ ]* //' |
  tr '\0' '\n'
2
Graeme
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.

SVNなし

繰り返しますが、これは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時間ではなくアクセス時間でソートします。

2
mikeserv

これは<dir>内のすべてのfilesをリストし、一番上のものが最も古い変更されます

find <dir> -type f -print0 | xargs -0 ls -ltr

そしてこれにより、最新の修正が最上位になります

find <dir> -type f -print0 | xargs -0 ls -lt

これが機能するのは、ファイル名のリストがシステムのコマンドラインの長さの合計制限を超えていない場合のみです。

1
UnX