从文件名中删除双前缀

Remove double prefix from filenames

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

例如:

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

How can I do this using command-line in Linux?

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

renameMusic.sh

#!/bin/bash

DIRECTORY=
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

感谢

我结合了@Barmar 的正则表达式和@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/^(.*)//')
        if [ "${FILENAME}" != "${NEWFILENAME}" ] ; then
            mv "${FILENAME}" "${NEWFILENAME}"
        fi
    done
done