[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


답변

신뢰성에 대한 참고 사항 :

개행 문자는 파일 이름에서와 같이 유효하므로 / 기반 과 같은 행에 의존하는 솔루션 에는 결함이 있습니다.headtail

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