Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么'';rm"$dir";/*!(.gitignore)和#x27';是否删除脚本本身?_Bash_Shell_Sh - Fatal编程技术网

Bash 为什么'';rm"$dir";/*!(.gitignore)和#x27';是否删除脚本本身?

Bash 为什么'';rm"$dir";/*!(.gitignore)和#x27';是否删除脚本本身?,bash,shell,sh,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=/v

我用这个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"
我做错了什么

rm -rf $INHOUSEFILES/* !(".gitignore")
这会删除
$INHOUSEFILES/*
中的所有文件,然后还会删除当前目录中除
.gitignore
之外的所有文件。这就是
!(“.gitignore”)
作为单独的参数时执行

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

rm -rf $INHOUSEFILES/!(".gitignore")
引用变量展开式也是一个好主意。(相反,您不需要将它们放在像
.gitignore
这样的文本字符串周围)


如果没有
dotglob
的话,
.gitinore
文件不会被删除吗?是的,
*
默认情况下与隐藏文件不匹配。也许OP想要删除
.gitignore
之外的隐藏文件?我不知道,由他们决定。请注意,您确实应该引用
[-d“$INHOUSEFILES”]
。(理想情况下,不要给它一个全大写的名称;这些名称由shell和POSIX定义的工具用于环境和内置变量,这些工具会更改它们的操作,而至少有一个小写字符的名称保证在应用程序使用时不会修改POSIX定义的工具的行为——请参阅相关标准at,保留在m中)指定shell变量的设置覆盖任何类似命名的环境变量)。
rm -rf "$INHOUSEFILES"/!(.gitignore)