[linux] Linux의 디렉토리에서 최신 파일 가져 오기
디렉토리에서 가장 최근의 단일 파일을 반환하는 명령을 찾고 있습니다.
에 대한 한계 매개 변수가 보이지 않습니다 ls
…
답변
ls -Art | tail -n 1
매우 우아하지는 않지만 작동합니다.
답변
ls -t | head -n1
이 명령은 실제로 현재 작업 디렉토리의 최신 수정 파일을 제공합니다.
답변
이것은 재귀 버전입니다 (즉, 특정 디렉토리 또는 하위 디렉토리에서 가장 최근에 업데이트 된 파일을 찾습니다)
find $DIR -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1
편집 : Kevin이 제안한 -f 2-
대신 사용하십시오.-f 2
답변
신뢰성에 대한 참고 사항 :
개행 문자는 파일 이름에서와 같이 유효하므로 / 기반 행 과 같은 행에 의존하는 솔루션 에는 결함이 있습니다.head
tail
GNU ls
에서 다른 옵션은 --quoting-style=shell-always
옵션과 bash
배열 을 사용하는 것입니다 .
eval "files=($(ls -t --quoting-style=shell-always))"
((${#files[@]} > 0)) && printf '%s\n' "${files[0]}"
( 숨겨진 파일도 고려 하려면 -A
옵션을 추가하십시오 ls
).
일반 파일 (디렉토리, fifo, 장치, 심볼릭 링크, 소켓 무시)로 제한하려면 GNU를 사용해야합니다 find
.
bash 4.4 이상 (for readarray -d
) 및 GNU coreutils 8.25 이상 (for cut -z
) :
readarray -t -d '' files < <(
LC_ALL=C find . -maxdepth 1 -type f ! -name '.*' -printf '%T@/%f\0' |
sort -rzn | cut -zd/ -f2)
((${#files[@]} > 0)) && printf '%s\n' "${files[0]}"
또는 재귀 적으로 :
readarray -t -d '' files < <(
LC_ALL=C find . -name . -o -name '.*' -prune -o -type f -printf '%T@%p\0' |
sort -rzn | cut -zd/ -f2-)
여기서 가장 번거 로움을 피하는 zsh
대신에 글로브 한정자 를 사용하는 것이 가장 좋습니다 bash
.
현재 디렉토리의 최신 일반 파일 :
printf '%s\n' *(.om[1])
숨겨진 것 포함 :
printf '%s\n' *(D.om[1])
두 번째 최신 :
printf '%s\n' *(.om[2])
심볼릭 링크 해결 후 파일 수명 확인 :
printf '%s\n' *(-.om[1])
재귀 적으로 :
printf '%s\n' **/*(.om[1])
또한 완성 시스템 (compinit
및 co)을 사용 Ctrl+Xm하면 최신 파일로 확장되는 완료자가됩니다.
그래서:
vi Ctrl+Xm
최신 파일을 편집하게 하시겠습니까 (누르기 전에 파일을 볼 수도 있습니다) Return ).
vi Alt+2Ctrl+Xm
두 번째로 작은 파일입니다.
vi * .cCtrl+Xm
최신 c
파일.
vi * (.)Ctrl+Xm
최신 일반 파일 (디렉토리 나 fifo / 장치가 아님) 등.
답변
나는 사용한다:
ls -ABrt1 --group-directories-first | tail -n1
폴더를 제외한 파일 이름 만 알려줍니다.
답변
ls -lAtr | tail -1
다른 솔루션에는로 시작하는 파일이 포함되어 있지 않습니다 '.'
.
이 명령에는 '.'
and 가 포함 되며 '..'
, 원하는대로 또는 아닐 수도 있습니다.
ls -latr | tail -1
답변
dmckee의 답변을 기반으로 한 단락 변형 :
ls -t | head -1