为什么“ rm“ $ dir” / *!(。gitignore)”会删除脚本本身?

时间:2019-09-11 19:08:11

标签: bash shell sh

我有一个正在使用的shell脚本来清​​理一些临时文件。 该脚本存储在 / root / cronjobs 中。 当我从此位置 ./ cleanUploader.sh 运行脚本时,它将删除当前文件夹中的所有文件及其自身。 这是脚本:

#!/bin/bash

# cleanUploader.sh
# Batch file to remove various temp directories and files left over from the Uploader

clear
echo 

INHOUSEFILES=/var/www/html/inhouseweb/officedb/uploader/files

shopt -s extglob
if [ -d $INHOUSEFILES ]; then
    echo "Removing directory $INHOUSEFILES"
    rm -rf $INHOUSEFILES/* !(".gitignore")
else
    echo "directory $INHOUSEFILES not found"
fi
echo

shopt -u extglob

echo
echo "Done"

我在做什么错了?

1 个答案:

答案 0 :(得分:3)

rm -rf $INHOUSEFILES/* !(".gitignore")

这会删除$INHOUSEFILES/*中的所有文件,然后 也会删除 current 目录中除.gitignore之外的所有内容。当!(".gitignore")是一个单独的参数时,它就是这样做的。

如果您打算删除$INHOUSEFILES/中除.gitignore之外的所有内容,请合并两个参数:

rm -rf $INHOUSEFILES/!(".gitignore")

引用变量扩展也是一个好主意。 (相反,您不需要像.gitignore这样的文字字符串来使用它们。)

rm -rf "$INHOUSEFILES"/!(.gitignore)