通过删除文件名中的标记来重命名文件夹(和子文件夹)中的文件

通过删除文件名中的标记来重命名文件夹(和子文件夹)中的文件

我有一个巨大的我需要重命名文件夹(和子文件夹)中的文件数量。例如,我有:

电影1.mp4
固定_电影1.mp4
...

我需要将 fixed_movie1.mp4 重命名为 movie1.mp4(从而覆盖原始文件)。

我目前拥有的:

TARGET_FILES=$(find /path/to -type f -name=*.mp4)
for f in $TARGET_FILES
do
  <some commands>
done

我知道如何使用 sed(我承认我不是太多!)但我在使用它时遇到了问题,因为 fixed_ 标记并不总是位于字符串的开头(在子文件夹中查找会添加到路径中)。

任何帮助,将不胜感激!

答案1

不需要使用sed。Bash 可以进行参数扩展:

for f in $TARGET_FILES ; do
    mv $f ${f/fixed_}
done

如果文件名包含空格,则应更加小心。创建脚本以重命名文件

#!/bin/bash
for f in "$@" ; do
    mv "$f" "${f/fixed_}"
done

然后运行

find /path/to -type f -name=*.mp4 -exec /path/to/script.sh {} +

如果+您的版本不支持find,您可以从脚本中删除循环,然后使用 逐个重命名文件\;

(如果您的find支持-execdir选项,您可以使用它来防止路径本身包含的情况fixed_)。

相关内容