删除文件名中的双前缀

问题描述 投票:0回答:1

我有一些文件嵌套在文件夹中,如果文件名是以重复两次的字符串开头,我想把文件名改为只出现一次的名称。如果文件名的开头是一个重复两次的字符串,我想把文件名改成这个字符串只出现一次的名字。

例如,我想把文件名改成

  • 将 "肮脏的投影仪 - 肮脏的投影仪 - 搜索生命.mp3 "改名为 "肮脏的投影仪 - 搜索生命.mp3"
  • 将 "Eefje de Visser - Eefje de Visser - Bitterzoet.mp3 "更名为 "Eefje de Visser - Bitterzoet.mp3"
  • 保持 "冯苏维 - 也许下一次.mp3 "的原样。

如何在Linux中使用命令行?

bash duplicates rename move
1个回答
1
投票

我结合了 @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

0
投票

如何在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

感谢

© www.soinside.com 2019 - 2024. All rights reserved.