ディレクトリmydir
のtarは隠しファイルと隠しサブディレクトリをアーカイブしますが、withinmydir
から*
ワイルドカードは使用しません。これは長年の既知の不整合またはバグですか?
編集(追加情報):ワイルドカードを使用したmydir
内のtarは、immediateディレクトリ内の隠しファイルと隠しサブディレクトリを「表示」またはアーカイブしません。ただし、mydir
の隠しサブディレクトリでは、隠しファイルと隠しサブディレクトリがアーカイブされます。
答えは、*
ワイルドカードはシェルによって処理され、ドットで始まるものには拡張されないということです。他のワイルドカード?
も、ドットで始まるものには展開されません。拡張を行うのはシェルであると指摘してくれたKeithに感謝します。したがって、tar
とは何の関係もありません。
shopt -s dotglob
を使用する場合、拡張には.filename
などが含まれます。アンディに感謝します。
shopt -u dotglob
を使用してオフにします。
dotglob
オプションを切り替えても、ls
自体は変更されません。むしろ、ls *
のようなものに示されているように拡張動作を変更するだけです。
編集:私の推奨事項は以下のコメントにあります。
ワイルドカードを使用すると、機能しません。を指定する必要があります。 (現在のディレクトリ)隠しファイルを含む完全なディレクトリを意味する場合。できるよ
tar -cvpzf test.tgz .
次を使用できます。
tar -cvpzf test.tgz * .??*
ただし、これは名前が2より大きい隠しファイルに対してのみ機能します(「。」および「..」を防ぐため)。
シェルはワイルドカードを展開するので、タールはワイルドカードを見ることさえできません。必要に応じて、明示的に追加する必要があります。 (.*
)。ただし、単一のディレクトリをtarするのが最も一般的であり、tarを解除するとすべてが同じ場所に移動します。
次を使用して、現在のディレクトリ(.hiddenを含む)内のすべてのファイル/フォルダを圧縮できます。
tar -zcvf compressed.tgz `ls -A -1`
最後の引数は、圧縮するフォルダーです。合格すればls -A -1
、現在のディレクトリ内のすべてのフォルダを渡しますが、.
および..
。サブディレクトリに関しては、.hiddenファイルはデフォルトですでに圧縮に含まれています。
shopt -s dotglob
これにより、