查找除一个目录之外的所有文件

查找除一个目录之外的所有文件

所以我想在开始工作之前清理一个目录。我看起来有点像这个。

./static
├── css
│   └── styles
├── img
│   └── pictures
└── js
    └── scripts

我想要和rm的内容,但不想要。cssjsimg

我知道我可以把两条路径都放进去,但这让我很烦恼,所以我尝试了这个,但没有成功。

rm -r ./static/{css,js}/*

rm: 无法删除 './static/{css,js}/*': 没有这样的文件或目录

我有什么想法可以让这项工作成功吗?

答案1

您的命令被视为*文件,请尝试rm -rf ./static/{css,js}/

或者,Bash 有扩展的通配符(先测试,然后删除echo):

$ shopt -s extglob
$ cd static
$ echo rm -rf !(img)

或者 简答

ls | grep -v "img" | xargs rm -rf

正如OP在评论中建议的那样,请按照此步骤完成您的工作。首先通过打印文件进行试运行,以确保您获得所需的内容。

$ find . -path ./img -prune -o -type f
./css/styles
./img
./js/scripts

确认无误后删除。

$ find . -path ./img -prune -o -type f -exec rm {} \;

$ static/
  ├── css
  ├── img
  │   └── pictures
  └── js

答案2

它有点长,但我总是喜欢find当我想要具体时。这应该保留结构并忽略 img 目录。

find ./static -type d ! -name 'img' -exec rm -f {}/* \;

正在发生的事情的细分

find命令

./static指定搜索位置

type -d挑选出目录

! -name 'img'忽略 img 目录

-exec rm -f {}/* \:'{}被替换为找到的目录名称并执行该命令。

相关内容