我通常这样做:

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 -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。

其他回答

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

我发现最简单的方法是:

CD my_dir && tar -czvf ../my_dir.tar.gz *

使用pax。

Pax是一个被弃用的包,但它以一种简单的方式完美地完成了这项工作。

pax -w > mydir.tar mydir
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

不客气

如果使用bash,这可能是最简单的答案。 使用shopt -s dotglob, bash命令将:

不包括根目录。 将包含根目录中的隐藏文件。

cd my_directory
shopt -s dotglob
tar -czvf ../my_directory.tar.gz *
shopt -u dotglob

(来自https://stackoverflow.com/a/9776491/7726468)

测试这个解决方案: