簡體   English   中英

遞歸刪除所有文件和文件夾,但不包括一個文件夾

[英]Delete all files and folders recursively but excluding one folder

我有一個這樣的文件夾結構:

my-root-folder
├── .git
├── README.md
├── index.css
├── index.js
├── index.html
├── assets
│   ├── image
│   │   ├── logo.jpg
│   │   ├── header.jpg

我想刪除所有文件和文件夾到my-root-folder但不是.git文件夾( ./my-root-folder/.git )和他的孩子。

我試過這個命令,但總是刪除所有:

shopt -s extglob && rm -rf ./* !(".git")

旁注我在一個基於 alpine 的 docker 鏡像中。

您可以嘗試使用find

find my-root-folder -mindepth 1 -not -path "*/.git*" -delete

粗略地翻譯,這意味着:在my-root-folder find at least one level deep (因此,排除文件夾本身)與謂詞path contains "/.git" not匹配的所有path contains "/.git"delete它。

請注意,參數".git"實際上是一個正則表達式,因此在適應其他情況時要小心。 find是一個非常強大和有用的工具,所以一定要查看它的文檔!

這個 find 命令也刪除嵌套的 .git :

find .  -mindepth 1 -path ./.git -prune -o -exec echo rm -rf {} \;

-path ./.git -prune -o僅排除頂級 .git

一個缺點是您可能會看到消息,因為find嘗試訪問它已經刪除的目錄。

一旦你開心就刪除echo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM