Grep

使用 package.json 中的 json 值批量重命名文件夾

  • August 27, 2018

這有點瘋狂,但我想知道這是否可能。

例如,我的文件夾中可能有 300 個文件/var/www夾都重命名為相同的[Name](Num)名稱kindred (19)

幾乎這些文件夾中的每一個都有一個名為的文件,該文件package.json都有一個name鍵值對,然後在其中包含項目的名稱。

{
 "name": "a useful project name",
  ......
 "main": "src/index.js",
}

我希望將包含 的文件夾package.json重命名為文件內的任何“名稱”值package.json

當您需要解析 json 文件時,最好使用的工具之一是jq. 這使得從目錄中的文件中提取name欄位變得容易。package.json執行重命名是一個簡單的 shell 腳本:

$ cd /var/www
$ for d in */; do  # *1
>    if [ -f "${d}package.json" ]; then  # *2
>        new_name=$(jq -e -M -r .name "${d}package.json")  # *3
>        if [ $? -eq 0 ] && ! [ -e "${new_name}" ]; then  # *4
>            mv "${d}" "${new_name}"  # *5
>        fi
>    fi
> done

一些注意事項:

*1:*/擴展到目前目錄下的所有目錄。每個目錄名稱都會/在末尾包含一個,因此我們稍後不會在 *2 和 *3 中添加一個。

*2: 只處理有package.json文件的目錄。

*3:呼叫jq以從 中提取名稱欄位package.json。我們呼叫jqwith-r來輸出原始字元串(即去掉雙引號),with-M沒有彩色輸出,如果沒有欄位-e,則退出並返回錯誤。jq``name

*4:檢查是否jq成功執行(有一個name欄位)並且目錄的新名稱不存在。else如果您想為跳過重命名的兩種情況輸出錯誤消息,您可能希望將它們拆分並添加一個。

*5:重命名目錄。

對於測試執行,我將在 *5echo的命令前面放置mv並檢查輸出以查看重命名是否正確。我自己沒有對此進行測試,因為我沒有一堆包含package.json文件的目錄。

引用自:https://unix.stackexchange.com/questions/464906