디렉토리가 있습니다
내 주요 디렉토리는/tmp/folder
그 안에는 /tmp/folder
X 폴더(파일 아님)만 있습니다 . 예를 들어
/tmp/folder/1
/tmp/folder/2
/tmp/folder/3
/tmp/folder/4
/tmp/folder/5
이 폴더 안에는 동일한 확장자를 가진 파일이 많이 있습니다. 각 폴더에서 마지막 및 처음 생성된 파일(수정 시간)을 가져오고 싶습니다.
나는 이런 출력을 선호한다
/tmp/folder/1,OLD_FILE,NEW_FILE
/tmp/folder/2,OLD_FILE,NEW_FILE
/tmp/folder/3,OLD_FILE,NEW_FILE
/tmp/folder/4,OLD_FILE,NEW_FILE
/tmp/folder/5,OLD_FILE,NEW_FILE
스크립트를 사용하여 이 출력을 구문 분석할 것이므로 출력에 대해 원하는 모든 작업을 수행할 수 있지만 쉽게 구문 분석할 수 있도록 친숙한 방식으로 수행하십시오.
bash 명령은 1이어야 합니다.
답변1
find "$DIR" -type d | while read d; do echo "$d,$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')"; done
또는 더 읽기 쉬운 형식으로 데모를 위해 추가 변수를 사용합니다.
find "$DIR" -type d |
while read d;
do
files=$(ls -t "$d" | sed -n '1h; $ { G; s/\n/,/g; p }')
printf '%s,%s\n' "$d" "$files";
done
$DIR
이 명령을 사용하면 모든 하위 디렉터리를 찾을 수 있습니다 find
. 발견된 각 파일에 대해 ls -tr
최신 항목부터 날짜별로 정렬된 해당 디렉터리의 파일 목록을 가져옵니다.
출력을 파이프하여 첫 번째 줄과 마지막 줄을 쉼표로 ls -tr
연결합니다 . 옵션은 기본 출력을 억제하고 첫 번째 줄(최신 파일 이름)을 다음 위치에 저장합니다.sed
-n
1h
예비 공간$
, 예약된 공간(최신 파일 이름)을 파일의 마지막 줄에 있는 패턴 공간(개행으로 구분)에 추가하고(선택하여 ) H
개행을 쉼표로 변경합니다.
그런 다음 스크립트 printf
는 하위 디렉터리 이름, 쉼표, sed
.
ls -t
이는 가장 오래된/최신 선택된 디렉터리와 파일 간에 차이가 없으므로 원하지 않는 경우 디렉터리를 제거하도록 출력을 필터링해야 합니다 .