次のコマンドは有効です
$ ls -1t | head -1
git_sync_log20180924_00.txt
$ vi git_sync_log20180924_00.txt
しかし、これはそうではありません
$ ls -1t | head -1 | vi
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
どうすればよいですか(最近変更されたファイルをviで開く)?
ベストアンサー1
vi -- "$(ls -t | head -n 1)"
(ファイル名に改行文字が含まれていないと仮定)。
または以下を使用する場合zsh
:
vi ./*(om[1])
または:
vi ./*(.om[1])
ただ考慮定期的な文書。
vi ./*(.Dom[1])
また考慮隠されたファイルを使用します(を使用するのと同じls -At
)。
これは、ファイル名に含まれる文字またはバイト値に関係なく機能します。後者に対応するGNUシェルとユーティリティの場合は、次のことができます。
IFS= read -rd '' file < <(
find . ! -name . -prune -type f -printf '%T@\t%p\0' | sort -zrn | cut -zf2-) &&
vi "$file"