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 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=-
}
在第一个命令中,< em >找到< / em >返回< em > my_dir < / em >的文件和子目录的列表。
然而,目录< em > my_dir < / em >本身包含在该列表中为'。'
< em > printf < / em >参数删除完整路径,包括'。'和所有crlf
然而,< em > printf < / em >的格式字符串< em > ' % P”< / em >中的空间在< em > my_dir < / em >的文件和子目录列表中留下了剩余,可以通过< em >找到< / em >命令的结果中的前导空格看到。< / p >
这对TAR来说不是问题,但如果你想修复这个问题,可以在第二个命令中添加< em > -mindepth 1 < / em >。