0

フォルダー内の bash スクリプトで次のスニペットを実行しています。これにより、コンテンツをアーカイブするフォルダー内でスクリプトを実行しているため、ルートフォルダーのないアーカイブが作成されます。

tar -pczf $ARCHIVE_NAME --exclude=${ARCHIVE_NAME} --exclude=$(basename ${0}) *

Archive Contents:
/a/
/b/
/c/
/a_normal_file

うまく機能しますが、 * を使用しているため、直接のディレクトリに隠しファイルがアーカイブされていません。私はいくつかの検索を行い、アーカイブ(ubuntu tar)隠しディレクトリを見つけてから、次のように変更しました:

tar -pczf $ARCHIVE_NAME --exclude=${ARCHIVE_NAME} --exclude=$(basename ${0}) .

Archive Contents:
/./a/
/./b/
/./c/
/./.a_hidden_file
/./a_normal_file

まだ機能しますが、名前が「.」であるルートフォルダーが作成されています。キャラクター。内容はその中にあります。以前の結果を取得するにはどうすればよいですか?ただし、直接のディレクトリに隠しファイルをアーカイブする場所はどこですか?

前もって感謝します!

4

2 に答える 2

4

-C、--directory DIR を使用

--directory=$(dirname ${0})

例:

$ ls -a xxx
.  ..  aaa  .bbb
$ tar cvf test.tar --exclude test.tar -C xxx .
./
./.bbb
./aaa
于 2012-11-08T10:13:00.283 に答える
1

アーカイブの解凍には影響しませんが (.は同じディレクトリを参照しているだけなので)、気になる場合は、ワイルドカードを から*に変更し.[^.]* *て、すべての隠しファイルも含めることができます。

..さらに、 などの で始まる隠しファイルがある場合は、リスト..aに追加する必要があります。..?*

于 2012-11-08T09:18:23.783 に答える