我通常这样做:

tar -czvf my_directory.tar.gz my_directory

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

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

我想要:

my_file
my_file
my_file

当前回答

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

其他回答

function tar.create() {
        local folder="${1}"
        
        local tar="$(basename "${folder}")".tar.gz
        
        cd "${folder}" && tar -zcvf "../${tar}" .; cd - &> /dev/null
}

例子:

tar.create /path/to/folder

不客气

看一看——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

我建议使用以下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。它适用于隐藏(.*)元素和文件名中有空格的元素。

 tar -cvzf  tarlearn.tar.gz --remove-files mytemp/*

如果文件夹是mytemp,那么如果你应用上面的方法,它会压缩并删除文件夹中的所有文件,但不要管它

 tar -cvzf  tarlearn.tar.gz --remove-files --exclude='*12_2008*' --no-recursion mytemp/*

您可以给出排除模式,也可以指定不查看子文件夹

art archive:

# tar -czvf mydir.tar.gz mydir

archive:涂

# tar -xf mydir.tar.gz