我通常这样做:

tar -czvf my_directory.tar.gz my_directory

如果我只想在my_directory中包含所有内容(包括任何隐藏的系统文件),而不包括目录本身,该怎么办?我不想:

my_directory
   --- my_file
   --- my_file
   --- my_file

我想要:

my_file
my_file
my_file

当前回答

cd my_directory && tar -czvf ../my_directory.tar.gz $(ls -A) && cd ..

这个方法对我很有用,它包含了所有隐藏文件,而不用把所有文件放在一个名为“。”的根目录中,就像tomoe的回答:

其他回答

你也可以像往常一样创建存档并提取它:

tar --strip-components 1 -xvf my_directory.tar.gz

我建议使用以下Bash函数(第一个参数是dir的路径,第二个参数是结果存档的basename):

function tar_dir_contents ()
{
    local DIRPATH="$1"
    local TARARCH="$2.tar.gz"
    local ORGIFS="$IFS"
    IFS=$'\n'
    tar -C "$DIRPATH" -czf "$TARARCH" $( ls -a "$DIRPATH" | grep -v '\(^\.$\)\|\(^\.\.$\)' )
    IFS="$ORGIFS"
}

你可以这样运行它:

$ tar_dir_contents /path/to/some/dir my_archive

它将在当前目录中生成归档文件my_archive.tar.gz。它适用于隐藏(.*)元素和文件名中有空格的元素。

如果它是Unix/Linux系统,并且你关心隐藏文件(会被*漏掉),你需要做:

cd my_directory
tar zcvf ../my_directory.tar.gz * .??*

我不知道Windows下的隐藏文件是什么样子。

使用tar的-C开关:

tar -czvf my_directory.tar.gz -C my_directory .

-C my_directory命令告诉tar将当前目录更改为my_directory,然后。意思是“添加整个当前目录”(包括隐藏文件和子目录)。

确保在执行之前执行-C my_directory。否则,您将获得当前目录中的文件。

警告:你会得到。/file-name格式的条目。Ext而不是file-name.ext!

如果需要file-name形式的条目。然后,阅读其他答案。

# tar all files within and deeper in a given directory
# with no prefixes ( neither <directory>/ nor ./ )
# parameters: <source directory> <target archive file>
function tar_all_in_dir {
    { cd "$1" && find -type f -print0; } \
    | cut --zero-terminated --characters=3- \
    | tar --create --file="$2" --directory="$1" --null --files-from=-
}

安全处理包含空格或其他不寻常字符的文件名。您可以选择添加一个名称'*。Sql '或类似于find命令的过滤器来限制包含的文件。