Find
在 macOS 上使用 find 和 mv 重命名目錄
我正在努力使用重命名目錄和文件的命令。
- 作業系統:MACOS 11.4
- 目標:通過用下劃線替換空格來重命名目錄和文件
_
- 命令嘗試:
find . -maxdepth 1 -iname "* *" -exec sh -c 'fichier="{}"; mv -- $fichier ${fichier// /_}' \;
我使用
find
是因為我希望能夠一次瀏覽目錄樹 1 級的深度。該命令的結果是:
usage: mv [-f | -i | -n] [-v] source target mv [-f | -i | -n] [-v] source ... directory
所以不是
mv
我用來echo
檢查命令find . -maxdepth 1 -iname "* *" -exec sh -c 'fichier="{}"; echo $fichier ${fichier// /_}' \;
這似乎按我的預期工作:
./Job offers etc ./Job_offers_etc ./School results ./School_results ./Famille et Souvenirs ./Famille_et_Souvenirs ./KID education ./KID_education ./Template Open Office-MS Office ./Template_Open_Office-MS_Office ./Mode Emplois ./Mode_Emplois ./cartres de voeux ./cartres_de_voeux
使用時我做錯了什麼
mv
?
您遇到了建議(幾乎)總是引用您的 shell variables的原因之一。
在您的情況下,由於您為 shell 變數分配了
fichier
一個包含空格的文件名,因此當您“按原樣”使用該變數時,shell 將執行分詞,即 as$fichier
。這意味著Job offers etc
作為參數的目錄mv
將被解釋為試圖將三個文件移動Job
到offers
目標etc
目錄Job_offers_etc
(1)。為了避免該問題,請在變數引用周圍放置雙引號,如
"$fichier"
.(1)這實際上可能很危險;在某些設置中,如果目標目錄不存在,該命令可能會導致三個文件重命名為相同名稱,從而有效地覆蓋前兩個文件。