특정 디렉터리의 파일 목록에서 최신 파일을 여는 방법은 무엇입니까? 동일한 파일 이름은 최신 날짜순으로 정렬됩니다.
현재 다음 명령을 사용하고 있습니다.
ls -lrt filename*
tail -f filename
답변1
쉘이 Bourne과 유사한 쉘이고 [
내장 함수 가 -nt
한 파일이 다른 파일보다 최신인지 테스트하는 테스트를 구현하는 경우 다음을 사용할 수 있습니다.
newest=
for file in ./* ./.*; do
if [ -f "$file" ]; then
if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
newest=$file
fi
fi
done
if [ -f "$newest" ]; then
printf 'The latest file is "%s"\n' "$newest"
else
echo 'Could not find files here' >&2
exit 1
fi
이는 현재 디렉터리(숨겨진 파일 포함)에 있는 모든 일반 파일(및 일반 파일에 대한 심볼릭 링크)을 반복한 다음 어떤 파일이 최신인지 알려줍니다. printf
이 명령문을 실행하려는 실제 명령으로 바꿀 수 있습니다 "$newest"
.
셸 함수로서 파일 목록도 인수로 받아들입니다.
newest () (
newest=
for file do
if [ -f "$file" ]; then
if [ -z "$newest" ] || [ "$file" -nt "$newest" ]; then
newest=$file
fi
fi
done
if [ -f "$newest" ]; then
printf '%s\n' "$newest"
else
echo 'No files found' >&2
return 1
fi
)
그 다음에
tail -f "$(newest ./filename*)"
답변2
설치된 경우 zsh
그곳에서 다음을 수행할 수 있습니다.
꼬리 -f 파일 이름Ctrl+xm
Ctrl+xm(마지막 파일을 기준으로) 최신 파일로 확장하는 완성기입니다.개정하다시간).
스크립트에서:
#! /usr/bin/env zsh
tail -f filename*(om[1])
om
수정 시간(가장 최근순)을 기준으로 정렬하고 첫 [1]
번째 항목을 선택합니다.
답변3
GNU를 사용하여 find
모든 파일의 마지막 수정 시간을 sort
역순으로 인쇄하고 가장 최근에 수정된 파일( head -n 1
--top 항목)을 가져온 다음 마지막으로 수정된 파일을 추적할 수 있습니다.
find <Directory-name> -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | head -n 1 | awk '{print $3}' | xargs tail -f