다음 명령에서 타임스탬프를 기반으로 파일 이름을 어떻게 얻을 수 있습니까?
$ grep "exit 0" a*
a1.txt:+ exit 0
a2.txt:+ exit 0
a3.txt:+ exit 0
a4.txt:+ exit 0
a5.txt:+ exit 0
$ ls -latr
-rw-r--r-- 1 user grp 83046 Oct 27 06:46 a5.txt
-rw-r--r-- 1 user grp 68108 Oct 27 07:59 a1.txt
-rw-r--r-- 1 user grp 159792 Oct 27 12:35 a2.txt
-rw-r--r-- 1 user grp 225703 Oct 27 16:41 a3.txt
-rw-r--r-- 1 user grp 246782 Oct 27 20:17 a4.txt
위 출력을 볼 수 있듯이 파일이 생성되었을 때의 타임스탬프를 기준으로 출력을 얻지 못하고 있습니다. 이것을 달성할 수 있는 방법이 있나요?
답변1
파일 이름에 공백, 탭, 개행( $IFS
수정되지 않음), ?
, *
, [
문자 또는 호출이 포함되어 있지 않으면 -
다음을 수행해야 합니다.
grep -- "exit 0" $(ls -tr a*)
$()
이를 명령 대체라고 합니다. 쉘이 먼저 실행된 ls -tr
다음 출력을 분할+글로브하여 명령에 전달된 파일 목록을 형성합니다 grep
.
답변2
쉘을 사용하면 zsh
다음을 사용하여 glob의 순서에 영향을 줄 수 있습니다.글로벌 예선.
grep 'exit 0' a*(.Om)
Om
시간을 수정하여 순서를 반대로 바꾸는 것입니다. .⃞만 선택하려면 .⃞도 추가했습니다.정기적인파일(아님목차또는관로또는장비또는심볼릭 링크...).
답변3
고마워요 오니. 다음 방법으로도 이것을 달성할 수 있었습니다. 물론 urs가 가장 간단합니다. 감사합니다
grep -H "exit 0" /opt/ctmagent/ctm/sysout_archives/141027/d_dms_btch_alrt_ifm_scp_ksh* | awk -F":" '{system("ls -latr "$1"")}'