ls -lrt 출력의 마지막 파일을 분류하는 한 줄 명령이요? [복사]

ls -lrt 출력의 마지막 파일을 분류하는 한 줄 명령이요? [복사]

시스템 로그 파일은 직렬화되어 있으며 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플랫폼에 따른 문자 오프셋 필드 번호를 제공하지 않고도 공백으로 구분된 마지막 단어를 얻을 수 있는 방법이 있습니다.

관련 정보