Удалить двойной префикс из имен файлов - PullRequest
1 голос
/ 05 мая 2020

У меня есть файлы, вложенные в папки. Если имя файла начинается со строки, которая повторяется дважды, я хотел бы изменить имя файла на имя, чтобы эта строка отображалась только один раз.

Например:

  • Rename «Грязные проекторы - Грязные проекторы - Поиск Life.mp3» на «Грязные проекторы - Поиск Life.mp3»
  • Переименуйте «Eefje de Visser - Eefje de Visser - Bitterzoet.mp3» в «Eefje de Visser - Bitterzoet.mp3 "
  • Оставьте" Feng Suave - Maybe Another Time.mp3 "как есть.

Как я могу сделать это с помощью командной строки в Linux?

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Я объединил регулярное выражение @Barmar и сценарий оболочки @ U880D, чтобы рекурсивно удалить любой повторяющийся префикс в именах файлов. Возникла проблема с использованием find и perl-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 голосов
/ 05 мая 2020

Как я могу сделать это с помощью командной строки в Linux?

После некоторых исследований это кажется немного более сложным. Следовательно, это, вероятно, закончится сценарием.

renameMusi c. 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

Благодаря

...