Grep
使用 package.json 中的 json 值批量重命名文件夾
這有點瘋狂,但我想知道這是否可能。
例如,我的文件夾中可能有 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
。我們呼叫jq
with-r
來輸出原始字元串(即去掉雙引號),with-M
沒有彩色輸出,如果沒有欄位-e
,則退出並返回錯誤。jq``name
*4:檢查是否
jq
成功執行(有一個name
欄位)並且目錄的新名稱不存在。else
如果您想為跳過重命名的兩種情況輸出錯誤消息,您可能希望將它們拆分並添加一個。*5:重命名目錄。
對於測試執行,我將在 *5
echo
的命令前面放置mv
並檢查輸出以查看重命名是否正確。我自己沒有對此進行測試,因為我沒有一堆包含package.json
文件的目錄。