首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除文件夹中除少数文件夹以外的所有文件/文件夹?

如何删除文件夹中除少数文件夹以外的所有文件/文件夹?
EN

Stack Overflow用户
提问于 2014-08-08 15:10:09
回答 6查看 505关注 0票数 6

我正在尝试为debian包编写维护脚本。假设我有一个如下的目录结构:

代码语言:javascript
运行
复制
application/
----application/file1.txt
----application/file2.txt
----application/config
--------application/config/c1.conf
--------application/config/c2.conf
----application/logs
--------application/logs/l1.txt
--------application/logs/l2.txt
----application/src
--------application/src/static/
------------application/src/static/js
------------application/src/static/css
--------application/src/s1.py
--------application/src/s2.py
----application/lib
--------application/src/js/
--------application/src/css/

现在,我想删除除configlogs之外的所有文件/文件夹(在本例中为srclib文件夹,以及file1.txtfile2.txt文件)。我的PWD当前是appliaction/目录的父目录(即,我可以在我的PWD中看到application )。

我应该使用什么命令(一个小的bash script会更好)?(我用一些选项尝试了rm -rf,但错误地删除了其他文件,所以在尝试任何其他文件之前,我想知道正确的答案!)

EN

回答 6

Stack Overflow用户

发布于 2014-08-08 15:56:49

据我所知,除了src,还有很多其他的文件夹,因为如果不这样的话,你只会使用rm -rf src

如果您的PWDapplication,即您在config logssrc的父目录中,那么您只需要一种方法来对除configlog之外的所有文件/文件夹使用rm -rf,那么为什么不创建一个for循环呢?

代码语言:javascript
运行
复制
    #!/bin/bash

    cd "/path/to/application"

    for file in * ; do
            case "$file" in
                    config )
                            echo "file is $file: doing nothing"
                    ;;
                    logs )
                            echo "file is $file: doing nothing"
                    ;;
                    * )
                            echo "file is $file: removing"
                            rm -rf "$file"
                    ;;
                    esac
            done
    exit 0
票数 1
EN

Stack Overflow用户

发布于 2014-08-08 16:08:21

这必须行得通:

代码语言:javascript
运行
复制
find ./application -depth -mindepth 1 -type d \
  -regextype posix-extended ! -regex ".*\/(config|logs).*" | \
  -exec rm -fr {}  \;

或者在xargs中,如果您没有包含换行符的文件夹名称,您可以这样写:

代码语言:javascript
运行
复制
find ./application -depth -mindepth 1 -type d \
  -regextype posix-extended ! -regex ".*\/(config|logs).*" | \
  xargs -t -I {} rm -fr {}

或者,对于xargs,如果您的文件夹名称中包含换行符,则可以使用:

代码语言:javascript
运行
复制
find ./application -depth -mindepth 1 -type d \
  -regextype posix-extended ! -regex ".*\/(config|logs).*" -print0 | \
  xargs -0 -t -I {} rm -fr {}

  • find将查找./application下的所有目录(包含/config/logs的目录除外),并从运行lowest
  • xargs开始打印这些目录,删除目录
票数 1
EN

Stack Overflow用户

发布于 2014-08-08 15:40:28

由于您只是删除了application/application/src目录,因此没有理由使用find等。你所需要做的就是:

代码语言:javascript
运行
复制
rm -rf application/application/src

剩余

代码语言:javascript
运行
复制
application/application/logs/l2.txt
application/application/logs/l1.txt
application/application/config/c1.conf
application/application/config/c2.conf
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25197825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档