答え1
一般的な考え方としては、次のような*
結果になるものを逆にすることになります。
printf '%s\n' * | tac
これを と一緒に使用して をxargs
生成しますvim
。これには 2 つの問題があります:
一般にファイル名には改行文字が含まれることがあるため、ヌル文字で区切って . を使用することをお勧めします
xargs -0
。vim
xargs
パイプで生成されたコマンドは、端末からの入力ではないというエラーを発します。奇妙なことが起こるかもしれません。コマンドを実行する前に子プロセスでstdin を再度開くことをxargs
サポートしている場合は、それを使用してください。-o
/dev/tty
全体的な解決策は次のようになります。
printf '%s\0' * | tac -s "" | xargs -0o vim
ノート:
tac
POSIX では必須ではありません。xargs
使用されるオプションをサポートしていない可能性があります。全体的なアプローチは移植可能ではありません。- オプション引数として空の文字列を指定すると、
tac -s
ヌル文字を明示的に渡さずにヌル文字を区切り文字として設定するようです (問題が発生する可能性があります)。 - がある
ARG_MAX
制限、より長いコマンドは実行できません。ファイルが多い場合、 の展開が*
制限を超え、 になることがありますArgument list too long
。printf
がシェルのビルトインである場合、この時点では制限が適用されない可能性があります。それでも、 がxargs
を生成しようとすると適用されますvim
。はxargs
これを検出し、必要に応じて 2 つ以上のvim
プロセスを順番に実行します。ただし、これは必要なことではない可能性があります。 を手動で反復処理するので:n
、ファイル数はそれほど多くないと思われるので、ARG_MAX
問題はないと思います。