我通常这样做:

tar -czvf my_directory.tar.gz my_directory

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

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

我想要:

my_file
my_file
my_file

当前回答

看一看——transform/——xform,它让你有机会在文件添加到存档时修改文件名:

% mkdir my_directory
% touch my_directory/file1
% touch my_directory/file2
% touch my_directory/.hiddenfile1
% touch my_directory/.hiddenfile2
% tar -v -c -f my_dir.tgz --xform='s,my_directory/,,' $(find my_directory -type f)
my_directory/file2
my_directory/.hiddenfile1
my_directory/.hiddenfile2
my_directory/file1
% tar -t -f my_dir.tgz 
file2
.hiddenfile1
.hiddenfile2
file1

Transform表达式类似于sed,在上面的例子中,我们可以使用除/(之外的分隔符)。 https://www.gnu.org/software/tar/manual/html_section/tar_52.html

其他回答

tar -C my_dir -zcvf my_dir.tar.gz `ls my_dir`

这对我来说很有效。

tar -cvf my_dir.tar.gz -C /my_dir/ $(find /my_dir/ -maxdepth 1 -printf '%P ')

你也可以用

tar -cvf my_dir.tar.gz -C /my_dir/ $(find /my_dir/ -mindepth 1 -maxdepth 1 -printf '%P ')

在第一个命令中,find返回my_dir的文件和子目录列表。 但是,目录my_dir本身包含在该列表中为'。' -printf参数删除包括'在内的完整路径。’以及所有CRLF 然而,printf格式字符串'%P '中的空格在my_dir的文件和子目录列表中留下了残余,可以通过find命令结果中的前导空格看到。

这对TAR来说不是问题,但如果你想修复这个问题,就像第二个命令一样添加-mindepth 1。

art archive:

# tar -czvf mydir.tar.gz mydir

archive:涂

# tar -xf mydir.tar.gz
cd DIRECTORY
tar -czf NAME.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。它适用于隐藏(.*)元素和文件名中有空格的元素。