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