sed를 사용하여 최신 날짜와 수정 날짜가 있는 파일 찾기

sed를 사용하여 최신 날짜와 수정 날짜가 있는 파일 찾기

날짜가 포함된 일련의 파일이 있고 최신 날짜와 최신 날짜 수정 사항이 포함된 파일을 가져와서 sed로 파이프해야 합니다. 다양한 방법을 시도했지만 작동하는 방법을 찾을 수 없는 것 같습니다.

예를 들어:

find . -iname '*2014-09-20*' -type f -exec ls -lrt {} \; -exec tail -1 {} \; -exec sed -n -e '/some test/,/some other text/p' {} \;

find . -iname '*2014-09-20*' -type f | xargs ls -lrt | tail -1 | sed -n -e '/some text/,/some other text/p'

로그 파일은 다음과 같습니다

-rw-r--r--. 1 root root  23042 Sep 18 14:21 logfilename_2014-09-19_20140918141909.log
-rw-r--r--. 1 root root   2343 Sep 18 14:22 logfilename_2014-09-20_20140918142142.log
-rw-r--r--. 1 root root   2343 Sep 18 14:23 logfilename_2014-09-21_20140918142245.log
-rw-r--r--. 1 root root   2343 Sep 19 10:11 logfilename_2014-09-20_20140919101031.log
-rw-r--r--. 1 root root   2343 Sep 19 10:12 logfilename_2014-09-21_20140919101122.log
-rw-r--r--. 1 root root   2343 Sep 19 10:13 logfilename_2014-09-22_20140919101218.log

출력은 다음과 같을 것으로 예상됩니다.

TEXT 1

line
line
line
line

TEXT 2

내가 할 때 작동합니다 :

sed -n -e '/TEXT 1/,/TEXT 2/p' logfilename_2014-09-20_20140919101031.log

하지만 위 명령의 결과를 sed로 전송하면 아무런 결과도 얻지 못합니다. 지금까지 시도한 내용은 다음과 같습니다.

find . -iname '*2014-09-19*' -type f | xargs stat --format '%Y : %y %n' | sort -nr | cut -d: -f2- | head -1 | sed -n -e '/TEXT 1/,/TEXT 2/p'

find . -iname '*2014-09-19*' -printf "%T@\t%p\n" | sort | awk -F"\t" '{print $NF}' | tail -1 | sed -n -e '/TEXT 1/,/TEXT 2/p'

답변1

가장 간단한 방법은 (그러나 파일에 공백이나 개행 또는 기타 이상한 문자가 포함되어 있으면 실패합니다)

ls -ltr '*2014-09-20*' | tail -n 1

더 안전한 방법은

find . -printf "%T@\t%p\n" | sort | awk -F"\t" '{print $NF}'

답변2

가장 최근에 수정된 파일을 사용해야 하는 경우 가장 쉬운 방법은 다음을 사용하는 것입니다.다루기 힘든다른 쉘 대신에 그것을 사용하십시오글로벌 예선 om수정 시간을 기준으로 일치 항목을 정렬하고 [1]첫 번째 일치 항목만 유지합니다.

echo *2014-09-20*(om[1])

파일 이름의 타임스탬프 부분을 기반으로 최신 타임스탬프를 원하는 경우 일반적인 정렬이 수행됩니다. 다음 함수는 마지막 인수에 대해 작동합니다.

act_on_last_file () {
  eval 'set -- "${'"$#"'}"'
  echo "$1"
}
act_on_last_file *2014-09-20*

관련 정보