我想.m4a
在子目录中递归地重命名具有扩展名的文件,以删除音频文件中不需要的字符,例如 ['
]。
04 Tears Don't Fall.m4a
这是因为在没有其他文件的情况下,该文件发生了以下情况 :
无法加载文件 2005-09-30 - 毒药(豪华版)[US - 88697-09021-2 - 2007]/04 Tears Don't Fall.m4a。也许它不是受支持的文件格式?尝试使用 ffmpeg 加载时,出现以下错误:FFmpeg 无法读取文件。
答案1
工作中肯定还有其他问题,因为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
。
该[\']
范围可以扩展以包括要删除的其他字符。例如,您可以选择[\'\\\"\\\`:]
删除单引号和双引号、反引号和冒号。 (单引号必须以 前缀\
;双引号、反引号和美元符号必须以 前缀\\\
。)
答案2
#!/bin/bash
shopt -s globstar
for fn in **/*\'*.m4a; do echo mv "$fn" "${fn/\'/}"; done
echo
在真正重命名之前需要检查结果。
答案3
首先,我们编写一个 shell 脚本,将 $1 移动到 $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 {} \;
测试令人满意,取消注释脚本文件的最后一行。