최근 수정된 파일 4개를 추적하는 방법은 무엇입니까?

최근 수정된 파일 4개를 추적하는 방법은 무엇입니까?

아주 간단한 것이 빠진 것 같고 마지막 4개 수정 파일의 마지막 몇 줄을 시드하는 것이 가능한지 궁금합니다. 나는 이런 것을 시도했다

tail | ls -lt | head -5

그런데 결과를 반복해서 tail을 적용해야 할 것 같은데 ls | -lt어떻게 해야 할지 모르겠습니다. 도움을 주시면 감사하겠습니다.

답변1

ls시작하기 전에 일반적 으로 출력을 다른 항목의 입력으로 사용하는 것은 나쁜 습관으로 간주됩니다 . 일반적인 함정은 이름에 공백/줄 바꿈이 포함된 파일의 경우 예상대로 작동하지 않을 수 있다는 것입니다.

ls | something이러한 제한 사항을 고려하면 대부분의 경우 이 방법이 제대로 작동한다는 것을 알게 될 것입니다 .

귀하의 명령은 올바른 방향으로 진행되고 있습니다. 위의 ls제한 사항이 있는 솔루션은 다음과 같습니다.

ls -t | head -5 | xargs tail

목록에 하위 디렉터리가 있으면 치명적이지 않은 오류가 발생합니다.

답변2

zsh셸 에서는 글로빙 모드를 통해 현재 디렉터리에서 가장 최근에 수정된 일반 파일 4개를 가져올 수 있습니다.

./*(.Dom[1,4])

... ./*현재 디렉터리의 모든 이름이 일치하며 괄호는 일치 동작을 수정합니다. 경기는 순조롭게 .진행됐다*오직일반 파일을 사용 D하여 숨겨진 이름과도 일치하도록 합니다( 쉘 dotglob에서 쉘 옵션이 활성화된 경우와 마찬가지로 bash). om수정 타임스탬프를 기준으로 결과 이름 목록을 정렬하고 [1,4]상위 4개의 이름을 선택합니다.

tail이러한 파일을 호출하려면 다음을 수행하십시오 .

tail ./*(.Dom[1,4])

bash셸 에서 :

zsh -c 'tail ./*(.Dom[1,4])'

현재 디렉토리나 그 아래의 모든 파일을 고려하려면 다음을 사용하십시오.

zsh -c 'tail ./**/*(.Dom[1,4])'

셸 옵션이 활성화되면 이 **패턴은 하위 디렉터리까지 반복적으로 일치한다는 점에서 동일한 와일드카드 패턴처럼 작동합니다. in glob 한정자는 숨겨진 이름이 있는 하위 디렉터리와 일치합니다.bashglobstarD**

답변3

아마도 이것이 당신에게 도움이 될 것입니다

find . -type f -mmin -5 -ls | tail -4

=> 대신 . 대상 디렉토리 경로를 추가하십시오.

위 명령은 5분 전에 마지막으로 수정된 파일을 제공합니다. 필요한 경우 마지막 수정 시간(분)을 5분에서 필요한 값으로 늘릴 수 있습니다.eg: 15min , 20min , 60min

답변4

하위 디렉터리가 없으면 파일 이름에 공백이 있어도 작동합니다. 그러나 파일 이름에 개행 문자가 포함되어 있으면 실패합니다.

ls -1t | head -4 | tr '\n' '\0' | xargs -0 head -10

불행하게도 하위 디렉터리가 있으면 실패합니다. 그렇다면 이것이 작동해야합니다

find . -type f -maxdepth 1 -print0 | xargs -0 ls -1t | head -4 | tr '\n' '\0' | xargs -0 head -10

관련 정보