我通常这样做:
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 -czvf my_directory.tar.gz my_directory
如果我只想在my_directory中包含所有内容(包括任何隐藏的系统文件),而不包括目录本身,该怎么办?我不想:
my_directory
--- my_file
--- my_file
--- my_file
我想要:
my_file
my_file
my_file
当前回答
我建议使用以下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。它适用于隐藏(.*)元素和文件名中有空格的元素。
其他回答
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
不客气
tar -cvzf tarlearn.tar.gz --remove-files mytemp/*
如果文件夹是mytemp,那么如果你应用上面的方法,它会压缩并删除文件夹中的所有文件,但不要管它
tar -cvzf tarlearn.tar.gz --remove-files --exclude='*12_2008*' --no-recursion mytemp/*
您可以给出排除模式,也可以指定不查看子文件夹
使用pax。
Pax是一个被弃用的包,但它以一种简单的方式完美地完成了这项工作。
pax -w > mydir.tar mydir
如果使用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)
测试这个解决方案:
tar -C my_dir -zcvf my_dir.tar.gz `ls my_dir`