ls의 출력을 사용하여 마지막으로 수정된 파일을 열려면 어떻게 해야 합니까?

ls의 출력을 사용하여 마지막으로 수정된 파일을 열려면 어떻게 해야 합니까?

ls -ltrwith 의 출력을 사용하는 방법이 있나요 xargs?

ls의 결과가 아래와 같은 파일이라고 가정합니다.

ls -ltr | tail -1 | xargs -I{} open {}

비교를 위해 다음 명령을 사용하여 find를 사용하여 파일을 이동했습니다.

find ~/Downloads/ -iname '*hello*' -print0 | xargs -0 -I{} mv {} ./

어떻게든 NUL 문자를 사용할 수 있나요?


[해결됨]
@illkachu의 의견에서 언급했듯이 다음 접근 방식은 작동하지만 권장되지 않습니다.

somecmd "$(ls -tr | tail -1)"

스테판이 제안한 것이 대안인 것 같았습니다.

답변1

일반적으로 말하면, ls.

예를 들어:

open -- "$(ls -t | head -n 1)"

최신 파일 이름에 개행 문자가 포함되어 있으면 아무런 효과가 없습니다.

이상적으로는 다음을 원합니다.

ls -zt | head -zn1 | xargs -r0 open --

ls하지만 안타깝게도 구현에 대한 지원/옵션이 없습니다 .-z-0GNU 관리자는 ls적어도 여러 번 추가를 거부했습니다..

이제 다른 방법도 있습니다.

C 로케일의 GNU 및 ast-open 구현의 경우 ls이 옵션을 사용한 출력은 --quoting-style=shell-always통과되거나 zsh사후 ksh93처리 될 수 있습니다 bash.

export LC_ALL=C
eval "files=($(ls --quoting-style=shell-always -t))"

open -- "${files[0]}" # $files[1] with zsh

zsh에서는 그냥 그렇게하지만

open ./*(om[1])

또는:

열려 있는. /Ctrl+Xm

zsh수정 시간(및 기능을 넘어서는 다른 많은 기준)별로 ls파일을 정렬하는 기능이 내장 되어 있습니다.

FreeBSD에는 json 또는 xml 출력을 생성하는 옵션이 ls있으므로 --libxo다음을 수행할 수 있습니다.

ls --libxo=json -t | perl -MJSON::PP -0777 -l0 -ne '
  print decode_json($_)
    ->{"file-information"}
    ->{directory}->[0]
    ->{entry}->[0]
    ->{name}' | xargs -r0 open --

하지만 그렇게 하면 모든 작업을 perl.

답변2

당신이 들었던 것처럼, 일반적으로 말해서 이것은 당신이 선택하고 싶은 방법이 아닙니다. 그러나 시작은 다음과 같습니다.

ls -ltr | awk '/^-/ { print $9; }' | xargs

관련 정보