
私は、次のコマンドを使用して、特定のディレクトリで最新の更新されたファイルを(再帰的に)リストし、変更時間でソートしました。
$ 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
コマンドに検索を入れる必要がありますか?
答え1
さらに必要ありません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
可能な限り効率的にするために、stat
findがすでにファイルにアクセスしていることを考慮すると、これは重複します。したがって、この方法を使用すると、実際にはファイルシステムに2倍以上の損傷を与える可能性があるため、これらすべてを実行するfind ... | stat ...
より効率的な方法があります。find
find . -path './directory/to/ignore' -prune -o -printf '%t %p\n'
| sort -n
このバージョンを機能させるには、printfコマンドを調整し、さまざまなファイルシステムメタデータstat
にfind
異なるコマンドを使用する必要がありました。
引用する
答え2
そしてzsh
:
stat -c '%y %n' -- **/*~path/to/ignore/*(D.Om)