从变量中删除斜杠

delete slash from variable

在帮助下,我有了这个脚本,但我不确定如何从变量中删除“./”以便我可以压缩文件夹。请你告诉我。

谢谢 尼克

#/bin/sh
BASEDIR=/tmp/

cd $BASEDIR
find . -type d | sort > newfiles.txt
DIFF=$(comm -13 oldfiles.txt newfiles.txt)
echo $DIFF
if [ "$DIFF" != "" ]
then
    #echo "A new dir is found"
   tar -czvf "$DIFF".tar.gz --verbose
fi

mv newfiles.txt oldfiles.txt

输出失败:

+ tar -czvf ./file2.tar.gz --verbose
tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.

错误源于此命令:

tar -czvf "$DIFF".tar.gz --verbose

您指定了存档名称,但未指定 files/folders 要添加到所述存档中的名称。

您需要将其更改为:

tar -czvf "$DIFF".tar.gz "$DIFF"

请注意,您不需要 --verbose,因为您已经用 -czvf 指定了 -v


但是,如果 DIFF 包含多个项目(即行),您的代码将无法按预期工作。你可能想要这样的东西:

#/bin/sh
BASEDIR="/tmp/"

cd "$BASEDIR"
find . -type d | sort > newfiles.txt
DIFF=$(comm -13 oldfiles.txt newfiles.txt)
echo "$DIFF"
IFS=$'\n'
for item in $DIFF
do
    #echo "A new dir is found"
   tar -czvf "$item.tar.gz" "$item"
done

mv newfiles.txt oldfiles.txt

也就是说,如果你想从 find 输出中删除 ./,你可以使用:

find . -type d -printf "%P\n" | sort > newfiles.txt

但您实际上不必为脚本工作而执行此操作。