[英]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.