のように見えるよう
は今DEST-dirのにコピーしたいと思います。 cpio
は、tar
とほぼ同じくらい古いもので、これまでより多くの利点がありましたが、obscurityに入っています。私はそれに新たなんだと主にこのコマンドを構築するために、古代のLinux Journal cpio guideを追っ:
mkdir dest_dir
cd source_dir
grep -Zlr "string" . |cpio -p0dmv ../dest_dir
これは取るように設計されて直接cpio
にパイプラインを介して、あなたの条件に一致するファイルのnull-terminated*リストを渡しますこの方法でファイルのリストを作成し、アーカイブまたはコピーします( "パススルー"、-p
)。ディレクトリ構造(-d
)と変更時刻(-m
)を保持して、ここでは後者を行います。これを冗長(-v
)に設定して、進行状況を見ることができます。 ssh
で接続している場合、ネットワーク上の各ファイル名をレンダリングすると処理が遅くなる可能性があります。 NULL終了について
*: 私は改行を含むファイル名の問題を回避するためにcpio -0
とgrep -Zl
を使用(!ことを行いません)。 grep -Zl
には、ヌル文字(パスに無効な文字のみ)で区切られたすべての一致するファイルがリストされ、cpio -0
にはNULL終了入力が必要です(xargs -0
と同じ)。
私はもともと、新しい場所にそれを抽出するために、再び一時的なアーカイブとtar
を作成するためにtar
をお勧めします。これは、tar
が別のファイル(または標準入力、cpio
のように)内のそのファイルのリストを受け入れる能力を持たないので、ファイルリストを引数に変換するのにxargs
を使用しましたが、xargs
は長すぎるコマンドを複数の呼び出しに分割し、tar
連結された出力**を抽出できません。
mkdir dest_dir
cd source_dir
grep -Zlr "string" . |xargs -0 tar -pc |tar -pxi --directory=../dest_dir
これは、あなたの先のディレクトリを作成ソースディレクトリに入り、( * nullで終わるファイルリスト)-Zl
ではgrepを実行し、-r
(再帰的)。xargs -0
は、そのリストをtar
の引数に変換し、それをアーカイブします。別のtar
インスタンスは、それらを宛先ディレクトリに抽出します。 --max-procs=1
に
**xargs
デフォルトと一緒に連結された複数のtarball、その結果、一度に1つのプロセスを実行しなければなりません。 further readingは、その問題を解決するためにtar
の抽出に-i
(ignore zeros)を追加するという簡単な方法を提案していますが、tar形式でこれを処理できるはずです。上記のコードに追加しましたが、テストしていません。
'.htmk'は本当に' .html'であるはずの最初のコードブロックでタイプミスしたと仮定します。 –