ls -t
のようなことをしたいのですが、サブディレクトリ内のファイルも含まれています。しかし問題は、出力がls -R
のようにフォーマットされたくないことです。これは次のようなものです。
[test]$ ls -Rt
b testdir test
./testdir:
a
サブディレクトリ内のファイルを表示するfind
コマンドのようにフォーマットしたいです。つまり:
[test]$ find .
.
./b
./test
./testdir
./testdir/a
ただし、find
が実行していないように見えるのは、最終更新時刻順に結果を時間順に並べることです。
それでは、ディレクトリとサブディレクトリ内のすべてのファイルを、find
と同じ形式で、ただし新しい順にリストする方法を教えてください。
これを試してください:
find . -type f -printf "%T@ %p\n" | sort -nr | cut -d\ -f2-
ls -lR
は、ホームディレクトリ内のすべてのファイル、ディレクトリ、およびサブディレクトリを表示しますls -lR | more
は、フロー内のすべてのファイルを表示するために使用されます。
表示するファイルの数が引数の最大制限内に収まる場合は、globstarを使用して必要なものを取得できます。globstarがサポートされている場合は再帰を使用できます。
正確に2つのレイヤーを深く使用する場合:ls -d * */*
Globstarで、再帰を使用する場合:ls -d **/*
ls
の-d
引数は、引数として渡されたディレクトリを再帰しないように指示します(シェルグロビングを使用して再帰を行うため)。これにより、ls
の再帰フォーマットが使用されなくなります。
find . -type d
またはfind . -type d -ls
を試してください
find -type f -print0 | xargs -0 ls -t
欠点:一定量のファイルに対してのみ機能します。非常に大量のファイルがある場合は、もっと複雑なものが必要です
これを試して:
ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total' |sed '/^$/d'
wfg5475's answer のコマンドは正常に機能しています。ディレクトリとサブディレクトリ内のファイルのみを表示するには、1つ追加するだけです。
ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total|^d' |sed '/^$/d'
1つ追加:^d
リスト出力からすべてのディレクトリを無視する