我有一个巨大的我需要重命名文件夹(和子文件夹)中的文件数量。例如,我有:
电影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_
)。