각 디렉토리의 마지막 줄만 나열하는 방법은 무엇입니까?

각 디렉토리의 마지막 줄만 나열하는 방법은 무엇입니까?

덕분에 목록의 마지막 행만 표시하는 방법을 배웠습니다.

ls -ltr | sed '$!d'

이제 나는 이것을 find 명령과 결합하여 모든 디렉토리에서 이것을 반복할 수 있는 방법을 생각했지만 잘못된 해결책만 얻었습니다.

find / -type d | xargs ls -ltr | sed '$!d'

올바르게 읽으면 각 디렉토리의 마지막 줄이 표시되지 않고 모든 디렉토리에 대한 모든 목록의 마지막 줄만 표시됩니다.

옳은 일은 무엇입니까?

답변1

나는 이 구성을 출발점으로 삼을 것이다.

find / -type d -print0 | xargs -0 -I'{}' sh -c 'ls -ltr {} | tail -1'

경고: 빈 디렉토리를 좋아하지 않습니다( total 0출력).

답변2

어쩌면 이것이 더 나을 수도 있습니다: find와 shell의 조합

find / -type d -print0 | while read -r -d '' dir; do 
    ls -ltr "$dir" | sed '$!d'
done

find발견된 각 디렉토리를 구분하기 위해 개행 대신 널 바이트를 사용하여 출력합니다. 이 스트림은 null로 구분된 각 디렉터리 이름을 추출하는 while루프 에 공급됩니다 . read -d ''그런 다음 각 디렉터리에 대해 마지막 줄을 제외한 모든 출력이 ls제거됩니다 sed.

핵심은 while각 디렉터리 이름을 반복하여 각 디렉터리에 대한 최신 파일을 찾을 수 있다는 것입니다.

이것의 큰 문제는 ls -l출력에 디렉터리 이름이 표시되지 않기 때문에 출력이 의미가 없을 수 있다는 것입니다. 파일을 볼 수 있지만 해당 파일이 어느 디렉터리에 나타나는지 알 수 없습니다.

각 디렉토리에서 최신 파일을 찾으려면 다음을 수행합니다.

find . -type f -printf "%h:%T@:%p\n" |
sort -t: -k1,1r -k2,2nr |
awk -F: '!seen[$1]++ {print $3}'
  • find디렉터리, 수정 시간 및 경로 이름 가져오기
  • sort디렉터리별로 그룹화하고 시간별로 정렬
  • awk각 디렉토리의 첫 번째 경로 이름을 인쇄하십시오.

관련 정보