ls -ltr
with 의 출력을 사용하는 방법이 있나요 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
-0
GNU 관리자는 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