
隠しファイルと隠しフォルダーを含むプロジェクト フォルダーをアーカイブしようとしているのですが、ルート エントリが のフォルダーが見つかります.
。これは困ったものです。通常、次のようになります。
tar -czf $ARCHIVE_NAME -C $DIR .
次のようなアーカイブを作成します
./package.json
./.git
./.gitignore
.
.
.
アーカイブのルートにはエントリではなく実際のファイルとフォルダを配置したい.
。
package.json
.git
.gitignore
.
.
.
それ、どうやったら出来るの?
* 編集 *
以下の画像は、この質問を明確にするのに役立つかもしれません。
- 左側は、プロジェクトの GUI ツールで作成されたアーカイブ (2 日前)。
- 右側は、上記の
tar
コマンドで作成されたアーカイブです。
「場所」バーに注目してください。右側のアーカイブは で/
、ない /./
。
答え1
./
現在のディレクトリを意味します。 2 つのリストは同一です。
./
アーカイブをリストするときにファイルの前にを付けると、特別な名前を持つファイルを処理するのに役立ちます。ファイル名は、2 番目のツールで処理できるよう-file
に表示されます。./-file
答え2
コマンドを変更する
tar -czf $ARCHIVE_NAME -C $DIR .
に
tar -czf $ARCHIVE_NAME -C $DIR ./*
これでうまくいくはずです。この方法では、「ディレクトリを.
アーカイブに追加する」のではなく、「ディレクトリ内のすべてのファイルを.
アーカイブに追加する」ことになります。
答え3
このコマンドは、先頭の : を除いて現在のディレクトリ内のファイルを tar します./
。
tar cf /some/tarfile.tar *
もちろん、ピリオドで始まるファイル名は含まれませんが、これはおそらく望ましくないでしょう。ワイルドカードを追加して、これらをキャッチすることができます。
tar cf /some/tarfile.tar * .[a-zA-Z]*
しかし、これは汎用的な解決策ではありません。適切なワイルドカードを作成できるように、ディレクトリ内のファイル名を知っておく必要があります。
ほとんどの Linux ディストリビューションで使用されている GNU tar には、式を使用してファイル名を変換する機能があります。これにより、アーカイブの作成時にファイルから がsed
削除されます。./
tar cf /some/tarfile.tar --transform 's,^\./,,' .
結果のアーカイブには、 "." ディレクトリ自体のエントリがまだ含まれています。
のいくつかのバージョンでは、tar
tar されるファイルの名前をファイルから読み取ることができます。この機能を利用して次の操作を実行できます。
ls -a | egrep -v '^\.\.?$' | tar cf - -T /dev/stdin
このパイプラインは、現在のディレクトリ内のすべてのファイルのリストを作成し、.
および..
エントリを削除して、残りの名前を にパイプしますtar
。tar は、(標準入力) から読み取ったファイル名からアーカイブを作成します/dev/stdin
。