
特定のディレクトリ(もちろんサブディレクトリも含む)のtarアーカイブを作成したいと思います。ただし、tarコマンドを使用してこれを実行すると、次の埋め込みファイルの一覧が表示されます。
Calendar_final/._style.css
Calendar_final/style.css
ご覧のとおり、同じファイルには2つのバージョンがあります。これはすべてのファイルに適用され、多くのファイルがあります。 tarアーカイブから._プレフィックスを含む一時ファイルを除外する方法は?
答え1
あなたはあなたのコメントでMac OS Xシステムで作業しているとマークしました。これはこれらのファイルの目的にとって重要な手がかりです._*
。
これらの._*
アーカイブ項目は大きな塊で構成されています。アップルダブルスそのファイル(プレフィックスのないファイル)に関する._
追加情報を含むデータ。 Mac OS X専用です。ファイルのコピー(3)関数系列。 AppleDouble blobはアクセス制御データ(ACL)と拡張属性(通常は発見者フラグと「リソースフォーク」ですが、xattrsはあらゆる種類のデータを格納するために使用できます。
システムbsdtar
提供OSMactar
gnutar
pax
._*
他のシステムの対応するアーカイブツールは、これらのファイルに対する特別な処理を知らないため、そのファイル._*
を通常のファイルに抽出します。これらのファイルは他のシステムではまったく役に立たないため、しばしば「ジャンクファイル」と見なされます。したがって、Mac OS X以外のシステムで作成されたアーカイブにで始まる一般的なファイルが含まれている場合、._
Mac OSは
ただし、システム提供のMac OS Xアーカイバが他のUnixyシステムと同じように動作するようにする文書化されていない(?)方法があります。これはCOPYFILE_DISABLE環境変数です。この変数を任意の値に設定すると(空の文字列であっても)、アーカイブが._*
アーカイブファイルに関連する拡張情報を表すためにアーカイブメンバーを作成するのを防ぐことができます。また、その存在は、アーカイバがそのようなアーカイブメンバーを拡張情報として解釈しようとするのを防ぎます。
COPYFILE_DISABLE=1 tar czf new.tar.gz …
COPYFILE_DISABLE=1 tar xzf unixy.tar.gz …
このように頻繁に作業するには、シェルの初期化ファイルでこの変数を設定できます。
# disable special creation/extraction of ._* files by tar, etc. on Mac OS X
COPYFILE_DISABLE=1; export COPYFILE_DISABLE
その後、(拡張情報を保存/復元するために)機能を再度有効にする必要がある場合は、個々のコマンドの変数を「オフにする」ことができます。
(unset COPYFILE_DISABLE; tar czf new-osx.tar.gz …)
Mac OS X 10.4のアーカイバは他の環境変数を使用しますが、同様のことを行います。 COPY_EXTENDED_ATTRIBUTES_DISABLE
答え2
これは働きます:
tar zcf calendar.tgz "a calendar_final" --exclude '.*'
答え3
フレデリック・ドウィットGNU tar(Linux、Cygwin、FreeBSD、OSX、その他のシステム用)では機能しますが、NetBSD、OpenBSD、Solarisなどの他のシステムでは機能しないソリューションが提供されています。
POSIXはコマンドを指定せずtar
(UNIXバリアント間で多様であったため)導入されました。pax
代わりにコマンドを発行してください。このオプションは、-w
アーカイブ(-r
抽出)を作成し、-x
アーカイブ形式を選択することを意味します。このオプションは、パスがデフォルトの-s '!BRE!!'
正規表現BREと一致するすべてのファイルを除外します。
pax -w -x ustar -s '!^.*/\..*$!!' calendar_final >calendar_final.tar
答え4
最新バージョンは、--no-xattrs
MacOS BSD tarフラグを使用してtarballを生成します。
tar --no-xattrs -c -f <tarfilename> [file list/glob/whatever]