아주 간단한 것이 빠진 것 같고 마지막 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 한정자는 숨겨진 이름이 있는 하위 디렉터리와 일치합니다.bash
globstar
D
**
답변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