我需要洗掉dist/檔案夾內的所有內容,除了manifest.jsonandindex.html和assets/。它將作為腳本在里面運行package.json。
我試著用 find 解決它
"clean": "find dist ! -name manifest.json -type f -delete | find . -type d -empty -delete"
但我無法讓它與多個引數一起作業。
編輯:
所以我想保留:
dist/assets/*資產內的一切。包括子目錄,如dist/assets/map/dog.ts
dist/manifest.json
dist/index.html
并洗掉其余部分,例如:
dist/pages/洗掉目錄、子目錄和檔案
dist/examples/洗掉目錄、子目錄和檔案
dist/randomfile.txt洗掉檔案
dist/hello.js洗掉檔案
dist/*等。
uj5u.com熱心網友回復:
根據您要保留的問題的當前版本
dist/assets/(以及里面的一切)dist/manifest.jsondist/index.html
并洗掉里面的所有其他東西dist。
為了測驗,我使用了這個find命令。
find dist -mindepth 1 -maxdepth 1 \
-type f \( -name manifest.json -o -name index.html -o -print \) -o \
-type d \( -name assets -o -print \)
如果輸出列出了應該洗掉的所有內容,dist您可以運行實際洗掉資料的版本。
find dist -mindepth 1 -maxdepth 1 \
-type f \( -name manifest.json -o -name index.html -o -print -delete \) -o \
-type d \( -name assets -o -print -exec rm -rf "{}" \; \)
解釋:
- 全域選項
-mindepth 1 -maxdepth 1將搜索限制在dist. -type f \( actions1 \) -o -type d \( actions2 \)使用 AND(-a或什么都不做)和 OR (-o) 操作actions1對檔案和actions2目錄執行,使用轉義括號,因為 AND 操作比 OR 具有更高的優先級。(如果dist(例如符號鏈接、命名管道等)中有任何其他物件,您可能需要添加條件和一些操作來捕獲其他情況。-name manifest.json -o -name index.html -o -print -deleteOR 運算:如果第一個運算式(匹配名稱)為真,-print -delete則不執行最后一個 ( )-name assets -o -print -exec rm -rf "{}" \;與上面類似,rm -rf用于遞回洗掉,因為-delete不會洗掉非空目錄。
替代解決方案:
- 改名
dist - 創建一個新的
dist - 將要保留的檔案和目錄移動到新的
dist - 遞回洗掉舊的重命名目錄。
mv dist dist.tmp && mkdir dist &&
mv dist.tmp/assets dist.tmp/manifest.json dist.tmp/index.html dist &&
rm -rf dist.tmp
uj5u.com熱心網友回復:
我認為該命令是:
$ rm -v !("filename")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/388385.html
上一篇:Bashshell選項-r
下一篇:Bash命令:頭
