次のコマンドを使用して、特定のディレクトリ内で最近更新されたファイルを(再帰的に)一覧表示し、変更時刻順に並べています。
$ stat --printf="%y %n\n" $(ls -tr $(find * -type f))
ただし、階層内には、ほぼ分単位で更新されるファイルでいっぱいのディレクトリが1つあるため、上記のコマンドは、問題のあるディレクトリ外のファイルを見つけるのにほとんど役に立ちません。
ls -I
フラグを使用してみましたが、役に立ちませんでした。
$ stat --printf="%y %n\n" $(ls -trI 'bad-dir' $(find * -type f))
ls
コマンドを使用して単一/特定のディレクトリを除外する簡単な方法はありますか?または、検索をfind
コマンドにプッシュする必要がありますか?
余分なls -tr
は必要ありません。これはコマンドと同等であり、より高速です。
find . -type f | xargs stat --printf="%y %n\n" | sort -n
このようなものは、ファイルのサブディレクトリを除外します。
find . -type f ! -path './directory/to/ignore/*' \
| xargs stat --printf="%y %n\n" \
| sort -n
サブディレクトリ全体を無視する場合は、-Prune
を使用してください。最初にすべてのファイルが見つからないように、少し並べ替える必要があります。
find . -path './directory/to/ignore' -Prune -o -type f -print0 \
| xargs -0 stat --printf="%y %n\n" \
| sort -n
そして、可能な限り効率的にするために、findがすでにファイルにアクセスしていることを考えると、stat
は冗長でした。つまり、実際にはfind ... | stat ...
アプローチでファイルシステム2Xにアクセスしているので、find
がすべての作業を実行するより効率的な方法を次に示します。
find . -path './directory/to/ignore' -Prune -o -printf '%t %p\n'
| sort -n
このバージョンを機能させるには、stat
とfind
がさまざまなファイルシステムメタデータに異なるディレクティブを使用するため、printfディレクティブを適応させる必要がありました。
zsh
の場合:
stat -c '%y %n' -- **/*~path/to/ignore/*(D.Om)