여러 디렉터리의 각 디렉터리에 대한 마지막 n개의 최신 파일을 찾는 방법

여러 디렉터리의 각 디렉터리에 대한 마지막 n개의 최신 파일을 찾는 방법

여러 디렉터리에 대한 마지막 n개의 최신 파일을 찾는 방법을 찾으려고 합니다.

문제는 디렉토리가 구조화되어 있지만 실제로는 계층적으로 배치되지 않고 특정 이름이 있다는 것입니다. 예:

./sensor
-./motion
--./2dMotion
---./saved
----./<name>.csv
---./processed
----./<name>.csv
--./3dMotion
---./saved
---./processed
-./temp
--./saved
---./<name>.csv
--./processed

내 문제는 다음과 같습니다. find 명령에서 -regex 옵션을 사용할 수 있지만 이는 최신 파일을 필터링하기 위해 추가 검색을 실행한 후에만 최신 파일을 제공하지만 센서의 작동 방식에 관계없이 최신 파일에 대해서만 작동합니다. 사용 .

내가 달성하고 싶은 것은 타임스탬프를 기반으로 최신 n개 파일을 표시하는 출력을 만드는 것입니다.

가능한 한 쉽게 이 작업을 수행할 수 있는 방법은 무엇입니까?

답변1

.csvGNU 시스템의 모든 디렉토리에 있는 10개의 최신 일반 파일 의 경우 :saved

LC_ALL=C find . -type f -regex '.*/saved/[^/]*\.csv' -printf '%T@:%p\0' |
  sort -rnz |
  awk -v RS='\0' -F/ '{sub(/[^:]*:/, ""); file = $0; NF--}
                      ++n[$0] <= 10 {print file}'

(파일은 최신 것부터 오래된 것 순으로 나열됩니다.)

를 사용하면 zsh다음 작업도 수행할 수 있습니다.

for dir (**/saved(NDF)) print -rC1 -- $dir/*.csv(ND.om[1,10])

답변2

find . -type d -exec bash -c 'echo "next dir: ${1}" ; ls -lt "$1" |
    grep ^- |
    head -n 5' bash {} \;

전체 트리에서 가장 최근의 것

전체 트리에서 최신 파일을 제공하므로 이는 답이 아니지만 어쨌든 도움이 될 수 있습니다.

find . -type f -printf "%T@ %p\n" |
    sort -nr |
    awk 'NR==6 { exit; } {$1=""; print; }'

답변3

ls -lt |grep '^-' |head -n N루프 내에서 사용하십시오.

for DIR in /path/to/*; do
if [ -d "$DIR"]; then
    ls -lt "$DIR/*.csv" |grep '^-' |head -n N
fi
done

N은 최신 파일 수인 경우 각 디렉터리의 결과에 표시할 파일 수를 지정할 수 있습니다. 바라보다만 LS.

관련 정보