tar
on a directory mydir
will archive hidden files and hidden subdirectories, but tar from within mydir
with a *
wildcard will not. Is this a known inconsistency or bug?
Edit: Additional information. tar
from within mydir
with a *
wildcard will not "see" nor archive hidden files and hidden subdirectories in the immediate directory. However, in the non-hidden subdirectories of mydir
hidden files and hidden subdirectories will be arch开发者_JAVA百科ived. In other words, deeper in the directory tree the hidden objects will be archived.
With wildcard it will not work. You have to specify . (current directory) if you mean full directory including hidden files. You can do
tar -cvpzf test.tgz .
The answer is that the *
wildcard is handled by the shell and it just does not expand to things that start with a dot. The other wildcard ?
also does not expand to things that start with a dot. Thanks to Keith for pointing out it is the shell that does the expansion and so it has nothing to do with tar
.
If you use shopt -s dotglob
then expansion will include things like .filename
. Thanks to Andy.
Use shopt -u dotglob
to turn it off.
Switching the dotglob
option does not change ls
itself. Rather it just changes expansion behaviour as exhibited in something like ls *
.
Edit: My recommendations are in a comment below.
You can use:
tar -cvpzf test.tgz * .??*
But, this works only for hidden files with names > 2 (to prevent '.' and '..')
You can compress all the files / folders in your current directory (including .hidden) by using:
tar -zcvf compressed.tgz `ls -A -1`
The last argument are the folders you want to compress. If you pass it ls -A -1
, you are passing it all folders in your current directory but .
and ..
.
When it comes to subdirectories, .hidden files are already included in the compression by default.
The shell expands the wildcards so tar doesn't even see it. You have to add them explicitly if you want to do that. (.*
). However, it's most common to tar a single directory so that when you untar it all goes to the same place.
shopt -s dotglob
this will make the
This will tar all hidden files and directories
tar -cvzf hidden.tgz `ls -a | egrep [.][^.]+`
精彩评论