特定のフィルタリングを使用したフォルダ構造の圧縮

特定のフィルタリングを使用したフォルダ構造の圧縮

次のフォルダ構造があります。

/foo
/foo/bar
/foo/bar2
/foo/bar3

すべてのフォルダ(含む/foo)には名前があります.txt。ただし、これらのファイルを除いて、/foo/foo/bar /foo/bar2などにファイルを含めたいと思います。

しかし、これを行うと:

tar cvfz foo.tgz --exclude="/foo/*.txt" /foo

.txt。さらに、階層全体のすべてのファイルがありません/foo

誰でもこれを達成する方法を知っていますか?

ベストアンサー1

--excludeglobスタイルのパターンのみを許可しているように見えるため、tarのみを使用してこれを実行できるかどうかはわかりません。ただし、findを使用してファイルのリストを取得し、正規表現を使用するgrepを使用してそのファイルをフィルタリングすることはできます。

find foo -type f -print0 | grep -z -v '^foo/[^/]*.txt$' | tar cvf foo.tgz --null -T -

オプション-print0とは-z--nullそのコマンドがレコード(ファイル名)を区切るために改行ではなくNULLバイトを使用することを示します。一部のファイルには予期しない文字が含まれる可能性があるため、これは良い習慣です。

おすすめ記事