答案1
总体思路可能是逆转*
结果:
printf '%s\n' * | tac
并将其与 一起用于xargs
生成vim
。这有两个问题:
一般来说文件名可能包含换行符,因此最好用空字符分隔并使用
xargs -0
。vim
在管道中生成的xargs
命令会抱怨输入不是来自终端。可能会发生奇怪的事情。如果您xargs
支持-o
(/dev/tty
在执行命令之前重新打开 stdin,就像在子进程中一样),那么请使用它。
整个解决方案如下:
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
不会有问题。