に基づくファイルから派生した比較的小さいファイル名のリストがありますfind
。ファイル名にはスペースや句読点を含めることができますが、印刷できない文字や改行文字は確実に含まれていません。
例えば、
Netherlands/Purge (GDPR) 2020-01-09.txt
Netherlands/Purge (GDPR) 2020-01-27.txt
Switzerland/New mailing 2020-01-27.txt
部分的にファイル間を簡単に前後に移動できるように、このファイルをグループ(vi file1 file2 file3
代わりに)で編集したいと思います。vi file1; vi file2; vi file3
私はすでに始まっています生成されたファイル名のリストを引数リストとして使用 - スペースを含める
、標準的なfind -print0 | xargs -0 mycommand
解決策があります。残念ながら、mycommand
編集者が編集者の場合は機能しません。なぜなら、xargs
編集するファイルセットを集めることは可能ですが、標準入力すでにパイプラインからインポートされているため、エディタを所定の場所で実行する方法はありません。パイプ自体find -exec vi {} +
だけでなく、ファイル名のセットを検証するためにパイプを使用しているため、これはできませんfind
。
他のオプションは、コピーして貼り付け、ファイル名のリストを結合し、引用符で囲んでから結果を前に追加することですvi
。これら3つのファイルの場合、これは単純ですが、通常は簡単に再利用できるソリューションではありません。
vi 'Netherlands/Purge (GDPR) 2020-01-09.txt' 'Netherlands/Purge (GDPR) 2020-01-27.txt' 'Switzerland/New mailing 2020-01-27.txt'
私が好むシェルとしてGNU / Linuxプラットフォームがある場合bash
(重要であれば)、生成されたファイルのリストのようなものをどのように編集できますか?
ベストアンサー1
Bashにいるから
#!/bin/bash
readarray -d '' -t files < <(find path -type f -print0)
vi -- "${files[@]}"
find path -type f -print0
実際のパイプと交換してください。
ファイルに改行文字がない場合でも、ユーザーはこれらのファイル名のサポートを追加しました。グレンジャックマン。
bufferの代わりにタブを使用するには、次のフラグをvi
追加します。-p
vi -p ...
配管が不要な場合は、このオプションを直接使用できます-exec
。
find path -type f -exec vi -- {} +