시스템 로그 파일은 직렬화되어 있으며 ls -lrt
이를 사용하여 최신 파일을 표시합니다. 그럼 내 cat
파일. 이를 위해서는 매번 긴 일련번호를 입력해야 합니다.
하나의 명령으로 cat
마지막 파일을 출력에 표시하는 방법은 무엇입니까?ls -lrt
나는 cygwin을 사용하고 있으며 출력은 ls -lrt foobar_job*
다음과 같습니다.
-
-rw-r--r-- 1 zundarz Domain Users 1133 Jul 31 16:54 foobar_job4855125.log
-rw-r--r-- 1 zundarz Domain Users 1256 Jul 31 17:10 foobar_job4855127.log
-rw-r--r-- 1 zundarz Domain Users 1389 Aug 11 10:20 foobar_job4887829.log
-rw-r--r-- 1 zundarz Domain Users 1228 Aug 11 10:39 foobar_job4887834.log
답변1
cat
명령에 최신 파일 만 원하는 경우에는 -l
이 옵션이 실제로 필요하지 않습니다. 활성화되면 Linux
옵션 을 Cygwin
사용하여 구문 분석을 더 쉽게 만들 수 -1
있습니다.
$ cat "$(ls -1rt | tail -n1)"
-1
휴대성이 매우 좋아야 합니다.POSIX.
또한 기억하세요구문 분석 ls
출력에는 단점이 있습니다..
편집하다:
올바르게 지적했듯이댓글 작성자: don_crissti당신은 필요하지 않습니다 -1
:
$ cat "$(ls -rt | tail -n1)"
답변2
이 방법은 정확성이 높지는 않지만 대부분의 경우에 작동합니다.cat "$(ls -1t | head -n1)"
답변3
내 시스템에서 이것을 시도했습니다.
~$ cat "$(ls -lrt | tail -n 1 | tr -s ' ' | cut -d ' ' -f9-)"
이미 작업 중입니다.
ls -lrt
-t
수정 시간( )을 기준으로 역순( )으로 정렬된 파일을 제공합니다 -r
.
tail -n 1
마지막 출력 줄을 제공합니다.
tr -s ''
줄에서 중복된 공백을 제거합니다.
cut -d ' ' -f9-
각 공백의 줄을 잘라내고 파일 이름인 9번째 필드를 입력합니다. 추가 -
하면 -f9
공백이 포함된 파일 이름에 중요한 다음 필드도 모두 제공됩니다.
별명
명령을 별칭으로 사용하려면 문자를 이스케이프해야 합니다 "
.
파일에는 공백이 포함될 수 있으므로 명령에 '가 필요하며, '로 묶지 않으면 "
명령이 여러 파일로 해석됩니다.cat
"
이 표시에서 탈출하는 것도 필요합니다 $
. 그렇지 않으면 별칭이 호출될 때마다 내부 명령이 실행 $(...)
되지 않고 별칭이 설정될 때 한 번 실행됩니다.
alias catrec="cat \"\$(ls -lrt | tail -n 1 | tr -s ' ' | cut -d ' ' -f9-)\""
답변4
Bash 한 줄(파일 이름에 공백이 포함되지 않은 경우):
cat $(ls -lrt | tail -1 | rev | cut -d" " -f1 | rev)
설명하다:
tail -1 # get last line of your ls
rev # reverse characters order
cut -d" " -f1 # take first field using space as a separator
따라서 rev | cut -d" " -f1 | rev
플랫폼에 따른 문자 오프셋 필드 번호를 제공하지 않고도 공백으로 구분된 마지막 단어를 얻을 수 있는 방법이 있습니다.