这是一个bash安装脚本。脚本foo.sh接受"DIRECTORY"作为参数。例如,有一个目录<$HOME>/TEST/TEST_1A/TEST_2A/TEST_3
和另一个目录<$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
。
脚本:foo.sh in brief.
DIR='find $HOME -type d -name $1 | head 1'
if [ DIR is set to a directory ]
then
rm -rf $DIR
fi
exit 0
用法:foo.sh TEST_3
现在从脚本中,只有<$HOME>/TEST/TEST_1A/TEST_2A/TEST_3
可以被删除。要删除<$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
,我需要在查找命令中使用reg exp,以微调删除以解决目录冲突。
修改了上面脚本的查找部分如下
DIR='find $HOME -type d -regexp $1 | head 1'
新用法:foo.sh TEST_2B/TEST_3
但是"find"命令无法将DIR
设置为<$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
,而是返回空的&因此DIR
是空的,我永远不能删除<$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
我如何更改脚本,以便查找可以仅对目录名称进行操作,以及对目录的路径也没有问题。事实上,一些用户可能会将部分目录路径作为"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
。这将处理(部分)目录名。
这难道不能正常工作吗?
find $HOME -type d -name $1 -exec echo {} ';' -exec rm -rf {} ';'
它会提示删除已处理的目录,但除了一些错误输出外,它还可以…
您可以更改"-name"为"-regexp",如您所建议的,但如果您想要更复杂的东西,您可以创建特殊的脚本从"-exec"调用
编辑:我可能第一次理解错了你(但不会删除任何东西,它可能会帮助别人)-你只想删除TEST_3目录中的一个(你如何选择哪一个?首先被发现的是什么?-这似乎很奇怪),仍然正如我在前一段中建议的,你可以提供脚本到-exec,它将照顾所有的决策)