这是一个 bash 安装脚本。脚本 foo.sh 将“DIRECTORY”作为参数。说,有一个目录<$HOME>/TEST/TEST_1A/TEST_2A/TEST_3
和另一个目录<$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
.
脚本:简单来说是 foo.sh。
DIR='find $HOME -type d -name $1 | head 1'
if [ DIR is set to a directory ]
then
rm -rf $DIR
fi
exit 0
Usage: foo.sh TEST_3
现在从脚本来看,只有<$HOME>/TEST/TEST_1A/TEST_2A/TEST_3
可以删除。去除<$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
,我需要在 find 命令中使用正则表达式,来微调删除以解决目录冲突。
将上面脚本的find部分修改如下
DIR='find $HOME -type d -regexp $1 | head 1'
新用法:foo.sh TEST_2B/TEST_3
但是“查找”命令无法获取DIR
set to <$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
并返回空 & 作为结果DIR
是空的,我永远无法删除<$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
如何更改脚本,以便 find 可以仅作用于目录名称以及目录的路径,没有任何问题。事实上,一些用户可能会给出部分目录路径作为“foo.sh”的参数。我希望“foo.sh”能够工作,即使在这种情况下
你可以尝试:
if [[ "$1" == */* ]]; then
EXPR="-path *$1"
else
EXPR="-name $1"
fi
DIR=$(find $HOME -type d $EXPR | head -1)
像“TEST_3”这样的简单名称将翻译为find -name TEST_3
但是像“ST_2/TEST_3”这样带有斜杠的名称将翻译为find -path *ST_2/TEST3
。这将处理(部分)目录名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)