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
최소한 여러 번 추가를 거부했습니다..
이제 일부 구현에는 다른 방법이 있습니다.
ls
C 로케일에서 GNU 및 ast-open 구현을 사용하면 옵션이 포함된 출력을 , 또는 --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