os x 從檔案名稱中刪除正斜杠

os x 從檔案名稱中刪除正斜杠

您好,我想從所有文件中刪除所有正斜杠,但對主目錄中的每個目錄遞歸執行此操作。

我該如何修改這個不遞迴運作的腳本?

for f in "$1"/*; do
dir="$(dirname "$f")"
file="$(basename "$f")"
mv -- "$f" "${dir}/${file//[^_-0-9A-Za-z.]}"
done

或者更好的是,我只想替換檔案名稱中的正斜杠,但這適用於主資料夾中的每個子資料夾?

問候麥克斯

答案1

在 BSD 圖層中,正斜線是路徑分隔符號。當遇到帶有正斜線的檔案名稱時,核心會將正斜線- 轉換/為冒號- :。因此,檔案名稱在查找器應用程式中可能看起來像,foo/bar但在 BSD 層中它看起來像foo:bar.

因此,要遍歷目錄樹,請使用其名稱中find的檔案來尋找檔案。:然後,使用內聯腳本-execdir從檔案名稱中刪除冒號(查找器應用程式中的正斜線)。

find . -type f -name '*:*' -execdir bash -c ' for file
    do
        echo mv -- "${file}" "${file//:}"
    done' sh {} \;

這只會列出mv命令和操作數。如果您覺得輸出會為您帶來所需的結果,請刪除echo.

相關內容