删除文件名中的双前缀



我有嵌套在文件夹中的文件。如果文件名以重复两次的字符串开头,我想将文件名更改为一个名称,使该字符串只出现一次。

例如:

  • 重命名"脏投影仪-脏投影仪-搜索生命.mp3"到"肮脏的投影仪-搜索生活.mp3">
  • 将"Eefje de Visser-Eefje de Visser-Bitterzoet.mp3"重命名为"Eefye de Visser-Bitterzoet.mp3">
  • 保持"冯-也许下次.mp3"的原样

如何在Linux中使用命令行执行此操作?

我组合了@Barmar的regex和@U880D的shell脚本,以递归方式删除文件名中的任何重复前缀。使用findperl-rename时出现问题,所以我不得不这样做:

#!/bin/bash
shopt -s globstar;
for DIR in ${PWD}/**/; do
cd "${DIR}"
for FILENAME in *.mp3 ; do
NEWFILENAME=$(echo "${FILENAME}" | perl -pe 's/^(.*)1/1/')
if [ "${FILENAME}" != "${NEWFILENAME}" ] ; then
mv "${FILENAME}" "${NEWFILENAME}"
fi
done
done

如何在Linux中使用命令行实现这一点

经过一些研究,它似乎有点复杂。因此,它可能最终会出现在脚本中。

renameMusic.sh

#!/bin/bash
DIRECTORY=$1
cd ${DIRECTORY}
echo "Normalize filenames in $(pwd)"
for FILENAME in *; do
echo
echo "Checking file ${FILENAME}"
# Count number of dash (-)
NUMBER=$(grep -o '-' <<< ${FILENAME} | wc -l)
echo "Found ${NUMBER} of dash (-)"

# Check if the artist name seems to be there twice
if [[ "${NUMBER}" -eq 2 ]]; then
# If so, remove the double part
NEWFILENAME=$(echo "${FILENAME}" | cut -d "-" -f 2- | sed -e 's/^[[:space:]]*//')
echo "Going to move to new name ${NEWFILENAME}"
# mv ${FILENAME} ${NEWFILENAME}
fi
done

感谢

  • 通过ls循环导致Bash-shell脚本
  • 如何循环查找返回的文件名
  • 使用grep计数出现的总数
  • Bash中的数字比较
  • 如何从Bash变量中修剪空白
  • renamemv有什么区别
  • 何时将引号括在shell变量周围

相关内容

  • 没有找到相关文章

最新更新