ディレクトリをコピーしますが、特定の名前のファイルは除外します。

ディレクトリをコピーしますが、特定の名前のファイルは除外します。

作業中のクラスタではrsyncを使用できないため、cpなどtarを使用する必要がありますfind。無視しながら、すべてのファイルやサブフォルダなどを含む大きなディレクトリをコピーしたいと思います。たとえば、「file1」、「file2」、「file3」などの名前のファイルはコピーされません。

私は見たこの文書はSOに関するものです。 これにより、次のことができます。含む特定のファイルのみ。基本的にこれが欲しいけど欲しい入らないようにする特定のファイル。

私も試しましたこのソリューション しかし、そこに提案されたコマンドを使用しようとするとtarエラーが発生しますtar: This does not look like a tar archivetar: Cowardly refusing to create an empty archive

cp !(filename-to-ignore) new_dir/私もこの投稿ただし、サブフォルダはコピーされません。

私はbashの初心者なので、答えやフラグなどの機能を説明してくれれば本当に役に立ちます。今試してみたのは難しくないと思います。

答え1

GNUまたはlibarchiveの使用tar

(cd src && tar --exclude='file[123]' -cf - .) |
  (cd dst && tar -xpf -)

GNUはtarファイルのスパース性を維持しておらず、すべての拡張属性ではなく、バージョン(または一部のオペレーティングシステムにいくつかのパッチがあるオペレーティングシステム)によって異なります。 (しばしば呼ばれるlibarchive)は拡張属性を保持し、抽出時にオプションを使用してスパースファイルを生成できます。tarbsdtar-S

パイプを介して互いに接続された2つのサブシェルを実行します。最初は(現在の)ディレクトリとすべての内容をtar再帰的に表すストリームを生成し.ますが、名前がパターンと一致するファイルを無視しますtest[123](正規表現ではなくシェルglobパターンに似ています。これには{ test1、2、3文字)来ます)。 } set)は、cサブシェルの現在の作業ディレクトリを中断したd後、独自の作業ディレクトリ()からストリームをcd動的に抽出します。tardst

GNUは、次のように内部的にこれを実行することも選択tarできます。-Cchdir()GillesはあなたがリンクしたQ&Aに表示されます。(1つの欠落がありましたが、今追加してエラーを説明しました。).シェルを使用するよりも利点はほとんどありませんが。cd

また、見ることができますinfo -n exclude tarファイルはGNUを使用してtarさまざまな方法で除外でき、より一般的にはinfo -n choosing tarファイルが作成または抽出するアーカイブにファイルを選択/含める方法を調整します。

関連情報