나는 다음 명령을 사용하여 특정 디렉터리에서 가장 최근에 업데이트된 파일을 (재귀적으로) 나열하고 수정 시간별로 정렬했습니다.
$ stat --printf="%y %n\n" $(ls -tr $(find * -type f))
그러나 계층 구조에는 거의 매분 업데이트되는 파일로 가득 찬 디렉터리가 하나 있으므로 해당 디렉터리 외부의 파일을 찾는 데 위 명령이 거의 쓸모가 없게 됩니다.
플래그 를 사용해 보았 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)