날짜가 포함된 일련의 파일이 있고 최신 날짜와 최신 날짜 수정 사항이 포함된 파일을 가져와서 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*