누군가 무엇이 잘못되었는지 지적할 수 있습니까? 디렉터리 검색 진행 중 (폴더 구조 및 파일 형식 기준) 폴더 구조는 모든 고객에게 동일합니다. 고객 폴더의 이름만 다릅니다. 구조 예:
- 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/*.xml
grep을 사용하고 건너뛸 수 있습니다. 원하는 경우 간단하지만 명확하지 않은 방법을 사용하여 sed 또는 dirname과 같은 경로 이름을 줄일 수 있습니다.