簡體   English   中英

npm 腳本刪除目錄中的所有文件,除了具有某些擴展名的文件(mac os)

[英]npm script to remove all files in directory except files with certain extensions (mac os)

我知道這里有很多類似的問題,但我還沒有找到我正在尋找的答案。 這是我嘗試在 npm 腳本中使用的命令。

rm -rf public/!(*.md)

我通過使用命令shopt -s extglob啟用了擴展全局連接,並且該命令在終端中運行良好。 我遇到的問題是,當我使用與 npm 腳本相同的命令時,它不會運行。

劇本

"scripts": {
   // ...
   "clean:public": "rm -rf public/!(*.md)",
   //...
}

運行腳本時我在終端中遇到的錯誤

> rm -rf public/!(*.md)

sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `rm -rf public/**/!(*.md)'

失敗的可能解決方案...

  1. 引用 glob rm -rf 'public/!(*.md)'
    • 這消除了錯誤,但腳本不會刪除文件。
  2. 我還嘗試用轉義的雙引號引用 glob 並得到相同的結果。
  3. 我嘗試轉義括號並收到 json 解析錯誤。

我覺得問題是...

我剛剛了解到 npm run 腳本不使用運行命令的用戶的 shell。 我不知道如何解決這個問題,除非安裝額外的 npm 包? 如果是這種情況,我應該安裝哪些軟件包?

在 bash 下運行你的腳本。 正如您從錯誤消息中看到的,即sh: ,這不是 bash。 如果腳本必須在 sh 下運行,請使用 sh-wrapper 腳本。 例如,如果您當前的 bash 腳本(包含rm或您需要做的任何事情)是foo.sh ,請將命令寫為:

"clean:public": "bash /path/to/your/script/foo.sh"

遇到了同樣的問題,並在del-cli包的推薦下讓它工作。

npm install --save-dev del-cli

然后在 package.json

"clean:public": "del public/** '!public/*.md'"

對於那些好奇的人,可以使用--force標志在當前目錄之外使用del

"clean:public": "del ../some-upper-dir/** '!../some-upper-dir/*.md' -f"

暫無
暫無

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

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