答案1
整體思路可能是反轉結果*
:
printf '%s\n' * | tac
並使用它xargs
來產生vim
.這樣做有兩個問題:
一般來說,檔案名稱可能包含換行符,因此最好用空字元分隔並使用
xargs -0
.vim
在管道中產生xargs
會抱怨輸入不是來自終端。可能會發生奇怪的事情。如果您xargs
支援-o
(/dev/tty
在執行命令之前重新開啟子進程中的標準輸入),請使用它。
那麼整個解決方案:
printf '%s\0' * | tac -s "" | xargs -0o vim
筆記:
tac
POSIX 不要求;xargs
可能不支援所使用的選項。整個方法不可移植。- 空字串作為選項參數似乎
tac -s
將空字元設定為分隔符號而不明確傳遞任何空字元(這可能有問題)。 - 有
ARG_MAX
限制,您無法執行更長的命令。如果檔案較多,擴展*
可能超出限制,您可能會得到Argument list too long
.如果printf
是您 shell 中的內建函數,則此時該限制可能不適用。xargs
嘗試生成時它仍然適用vim
。xargs
將檢測到這一點並按順序運行兩個或多個vim
進程(如果需要)。然而,這可能不是您想要的。希望,由於您要手動迭代:n
,我預計文件數量不會那麼大,所以ARG_MAX
不會成為問題。