
나한테 디렉토리가 있어
내 주요 디렉토리는/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
디렉터리를 제거해야 합니다.