bash:反向(即非)shell 通配符扩展?
有没有办法处理反 bash v4 shell 扩展,即。不将所有文件视为通配符?在这种情况下,我需要 rm
所有不属于 'Folder-???'
格式的文件,并且想知道是否有更短的(即内置) 方式然后进行
for file in *
do
[[ $i =~ \Folder-...\ ]] && rm '$i'
done
循环。 (顺便说一句,这个例子不起作用……)
只是出于学习 bash 的好奇心……
Is there a way of handling invers bash v4 shell expansion, ie. treat all files NOT like a wildcard? I need to rm
all files that are not of the format 'Folder-???'
in this case and was wondering if there is a shorter (ie. built-in) way then doing a
for file in *
do
[[ $i =~ \Folder-...\ ]] && rm '$i'
done
loop. (the example doesn't work, btw...)
Just out of bash learning curiosity...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
@Dimitre 有 bash 的正确答案。一个可移植的解决方案是使用
case
:另一个 bash 解决方案是在
[[ ... ]]
中使用模式匹配运算符 (文档)@Dimitre has the right answer for bash. A portable solution is to use
case
:Another bash solution is to use the pattern matching operator inside
[[ ... ]]
(documentation)如果您可以使用
find
,则可以使用-not
反转find
的谓词。如
(请注意,除了与 shell glob 匹配的其他差异之外,这也是递归匹配,但我假设您足够了解
find
)In case you are ok with
find
, you can invertfind
's predicates with-not
.As in
(note this matches recursively among other differences to shell glob matching, but I assume you know
find
well enough)