폴더의 최신 파일을 표시하는 재귀 디렉터리 검색

폴더의 최신 파일을 표시하는 재귀 디렉터리 검색

누군가 무엇이 잘못되었는지 지적할 수 있습니까? 디렉터리 검색 진행 중 (폴더 구조 및 파일 형식 기준) 폴더 구조는 모든 고객에게 동일합니다. 고객 폴더의 이름만 다릅니다. 구조 예:

  • httpdocs/client1/channel1/backup
  • httpdocs/client5/channel5/backup
  • httpdocs/client8/channel1/backup

이것은 부분적으로 작동하며 최신 파일에 해당하는 백업 폴더의 모든 파일을 표시합니다.

#!/bin/bash

# Array of root folders
#folders=("a" "b")
array=(httpdocs/*\/client1/backup/*.xml)

# Search all specified root folders
for dir in "${array[@]}"; 
do echo "$dir";
    # date of each file with "stat"
    find -path $array -type f -exec stat -f "%m,%N" {} ';' | \
        # sort by date, most recent first
        sort -gr | \
        # extract first (most recent) file
        head -1 | \
        # return file name only
        cut -d, -f2
done

헤더가 작동하지 않는 것 같습니다. 이유가 있나요? 내 형식이 잘못되었나요?

나는 또한 다음을 시도했습니다.

find -path "*\/chanel1/backup/*.xml" -type f | sort -gr | head -1 | cut -d, -f2

그러면 목록의 마지막 폴더와 ​​해당 폴더의 최신 파일만 출력됩니다. (웹 루트(Httpdocs)에서 실행해야 합니다)

답변1

나는 마지막 방법과 비슷한 것을 사용할 것입니다.

for d in $(find httpdocs -type d -name backup) do ls -t $d | grep '.xml$' | head -1 done

ls -t수정 시간을 기준으로 최신순으로 정렬합니다.

출력에 전체 경로 이름을 표시하려면 ls -t $d/*.xmlgrep을 사용하고 건너뛸 수 있습니다. 원하는 경우 간단하지만 명확하지 않은 방법을 사용하여 sed 또는 dirname과 같은 경로 이름을 줄일 수 있습니다.

관련 정보