因此,过去几天来我一直在研究脚本,并遇到了这个可怕的问题!我正在尝试删除文件夹中除一个文件之外的所有内容。我已经使用shopt -s extglob
在bash脚本中启用了“ extglob” shell选项,并且据我所知正确地设置了命令。这是我的问题的一个示例:
#!/bin/bash
drive=$1
outpath=/media/removable/$drive/test
shopt -s extglob
if [[ $2 = "Delete" ]];then
rm -rvf $outpath/* !($outpath/save.tar)
# Also tried this:
# rm -rvf !($outpath/save.tar) $outpath/*
exit
fi
(不是我的实际文件,而是一个示例。)
我的目录设置为/
,由于某种原因,它开始删除我的根目录中有权损坏的每个文件。我并不特别在意从中恢复,我的脚本根本无法正常工作,而且我无法将其排除在这个文件之外。我已经尝试了上面的示例,已经尝试了rm -rvf $outpath/* $outpath/!(save.tar)
,但似乎没有任何效果。有谁知道如何正确使用〜(“ path / to / file”)排除文件/路径?特别是在使用变量定义路径时?
答案 0 :(得分:2)
假设save.tar
位于test
文件夹中,则无需使用单独的路径即可将文件排除在删除范围之外。除您在!()
内提供的文件外,求反运算符已经使所有文件都遍历。
你可以做
rm -rvf "$outpath"/!(save.tar)
或者,如果您需要排除多个.tar
个文件,则可以将否定符内的glob移动为!(*.tar)
,这意味着删除所有,但以{结尾的文件除外{1}}
下面是您问题的一个简单的可重现示例。在这里,命令.tar
以外的所有文件删除并按预期工作。
file6
有关bash extended globbing的更多信息。