我有一个脚本,我需要检查外部存储上是否存在目录,如果有任何不匹配,它应该退出 - 除了文件list
中列出的那些
它们以完整路径列出,有时包含特殊字符,空格[]
,{}
而不包含utf字符。每行有一条路径。
$ cat /data/list
/data/test [test] {test}
/data/test directory
/data/test name
我的脚本没有排除列表。检查排除列表不起作用。即,在列表中找到/data/test [test] {test}
时它不会中断,而是退出,因为它在/external/data/
处不存在。
我认为问题是匹配的,因为$(< / data / list)的格式没有换行符,但在我的实验中有和没有""
和=~
等没有结果。
#!/bin/bash
for i in /data/storage/*; do
if [[ ! -h "$i" ]]; then
if [[ "$i" == "$(< /data/list)" ]]; then
break; else
if [ -e "/external//data/${i##*/}" ]; then
echo "/external/data/${i##*/} exists!"; else
echo "$i doesn't exist at /external/data/${i##*/}";
exit 1
fi
fi
fi
done
答案 0 :(得分:1)
感谢shellter,我使用grep -F
来匹配文字字符串
#!/bin/bash
for i in /data/storage/*; do
if [[ ! -h "$i" ]]; then
if grep -Fqx "$i" /data/list ; then
echo "found ${i##*/} in list" || break; else
if [[ -e "/external/storage${i##*/}" ]]; then
echo "/external/storage/${i##*/} exists!"; else
echo "${i##*/} doesn't exist at /external/storage/${i##*/}";
exit 1
fi
fi
fi
done