24

tarディレクトリ上のmydirは隠しファイルと隠しサブディレクトリをアーカイブしますが、ワイルドカードを使用した内部からの tar はアーカイブしません これは既知の矛盾またはバグですか?mydir*

編集:追加情報。ワイルドカードを使用したtarfrom withinは、 直接のディレクトリ内の隠しファイルや隠しサブディレクトリを「表示」したり、アーカイブしたりしません。ただし、非表示のファイルの非表示のサブディレクトリと非表示のサブディレクトリはアーカイブされます。つまり、ディレクトリ ツリーのより深いところに、非表示のオブジェクトがアーカイブされます。mydir*mydir

4

7 に答える 7

35

ワイルドカードでは機能しません。を指定する必要があります。(現在のディレクトリ)隠しファイルを含む完全なディレクトリを意味する場合。できるよ

tar -cvpzf test.tgz .
于 2011-01-01T02:20:22.137 に答える
9

答えは、*ワイルドカードはシェルによって処理され、ドットで始まるものには展開されないということです。もう 1 つのワイルドカード?も、ドットで始まるものには展開されません。指摘してくれた Keith に感謝します。拡張を行うのはシェルであり、tar.

を使用するshopt -s dotglobと、拡張には次のようなものが含まれます.filename。アンディに感謝します。

を使用shopt -u dotglobしてオフにします。

オプションを切り替えてもそれ自体dotglobは変わりませんls。むしろ、 のような展開の動作を変更するだけls *です。

編集:私の推奨事項は以下のコメントにあります。

于 2012-01-21T05:15:13.020 に答える
7

以下を使用できます。

tar -cvpzf test.tgz * .??*

ただし、これは名前が 2 を超える隠しファイルに対してのみ機能します (「.」および「..」を防ぐため)。

于 2014-01-28T11:03:02.763 に答える
4

次を使用して、現在のディレクトリ (.hidden を含む) 内のすべてのファイル/フォルダーを圧縮できます。

tar -zcvf compressed.tgz `ls -A -1`

最後の引数は、圧縮するフォルダーです。これを渡すとls -A -1、現在のディレクトリ内のすべてのフォルダーが渡されますが.... サブディレクトリに関しては、.hidden ファイルはデフォルトで圧縮に含まれています。

于 2016-01-02T12:37:45.390 に答える
3

シェルはワイルドカードを展開するので、tar はワイルドカードを認識しません。そうしたい場合は、それらを明示的に追加する必要があります。( .*)。ただし、1 つのディレクトリを tar するのが最も一般的であるため、展開するとすべてが同じ場所に移動します。

于 2011-01-01T02:20:38.657 に答える
1
shopt -s dotglob

これにより、

于 2011-11-21T19:29:44.363 に答える
-1

これにより、すべての隠しファイルとディレクトリがtarされます

tar -cvzf hidden.tgz `ls -a | egrep [.][^.]+`
于 2022-01-20T01:45:36.590 に答える