Find

如何使用特定副檔名遞歸地重命名文件以刪除音頻文件中不需要的字元

  • August 17, 2022

我想在子目錄中遞歸地重命名帶有.m4a副檔名的文件,以刪除音頻文件中不需要的字元,例如 [ ']。

04 Tears Don't Fall.m4a這是因為在沒有其他文件的情況下,此文件發生了以下情況 :

無法載入文件 2005-09-30 - 毒藥(豪華版)

$$ US - 88697-09021-2 - 2007 $$/04 眼淚不落.m4a. 也許它不是受支持的文件格式?嘗試使用 ffmpeg 載入時,出現以下錯誤:FFmpeg 無法讀取文件。

工作中肯定還有其他問題,因為ffmpeg它完全能夠讀取包含單引號的文件名:

mkdir '2005-09-30 - The Poison (Deluxe Edition) [US - 88697-09021-2 - 2007]'
cp -p {another.m4a} "2005-09-30 - The Poison (Deluxe Edition) [US - 88697-09021-2 - 2007]/04 Tears Don't Fall.m4a"

ffmpeg -i "2005-09-30 - The Poison (Deluxe Edition) [US - 88697-09021-2 - 2007]/04 Tears Don't Fall.m4a"

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2005-09-30 - The Poison (Deluxe Edition) [US - 88697-09021-2 - 2007]/04 Tears Don't Fall.m4a':
 Metadata:
   major_brand     : M4A
   minor_version   : 0
   compatible_brands: M4A mp42isom
...

也許你沒有正確引用。不幸的是,如果沒有看到您的程式碼,就無法驗證這一點,只能將其標記為可能的問題。

但是,如果您真的想重命名文件以刪除一組字元,則可以使用如下程式碼:

find . -type f -name '*.m4a' -exec \
   sh -c 'for f in "$@"; do echo mv "$f" "${f'"//[\']/"'}"; done' _ {} +

echo準備好執行時刪除mv

[\']範圍可以擴展為包括要刪除的其他字元。例如,您可以選擇[\'\\\"\\\:]刪除單引號和雙引號、反引號和冒號。(單引號必須以 . 為前綴` ;雙引號、反引號和美元符號必須以 . 為前綴\\\。)

首先我們編寫一個移動的shell腳本 $ 1 to $ 1 沒有 (’) 我們稱之為 special_move.sh。不要忘記給文件執行權限。

#!/bin/bash

orgFile=$1
destFile=${orgFile//\'/}

echo "mv $orgFile $destFile"
#mv $orgFile $destFile

然後移動到儲存文件的根目錄並鍵入 cmd

find . -name "*'*.m4a" -exec /absolute/path/special_move.sh {} \;

它測試令人滿意,取消註釋最後一行腳本文件。

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