Как я могу переместить файлы в поддиректориях mp3 в родительский каталог и удалить поддиректории mp3/flac?

Вопрос или проблема

Моя музыкальная коллекция содержит папки с именами «Имя артиста», многие из которых содержат подпапки с «Название альбома». Если в папке «Имя артиста» нет папок «Название альбома», то эта папка содержит файлы .flac и папку «mp3» с конвертированными в mp3 файлами flac. В папках «Имя артиста», которые содержат «Название альбома», папка mp3 находится в каждой подпапке «Название альбома». Вот что я хочу сделать:

  1. Удалить файлы .flac из каждой папки (мне не нужно их сохранять).
  2. Переместить файлы из папки mp3 в корневую папку.
  3. Удалить папку mp3.

Существует ли командный терминал, который выполнит это? Заранее спасибо за любую помощь!

Ниже представлен ручной метод. Если вам нужен скрипт, вы должны будете предоставить образец директорий и файлов. Проблема со скриптами… даже если он написан неправильно, скрипт об этом не позаботится… он выполнит то, что вы считаете правильным, возможно, создав необратимый конечный результат.

При возможности сначала создайте резервную копию. Команды rm и mv могут привести к путанице, если их использовать неправильно. Чтобы протестировать то, что вы хотите сделать, вы можете использовать ls и cp с той же второй частью и посмотреть, выполняется ли задуманное правильно.

Вы можете удалить файлы из подпапок, используя подстановочный знак.

rm */*.flac

удалит файлы, оканчивающиеся на .flac, из текущего местоположения на глубину 1 каталог. Вы можете добавить больше /*, чтобы углубиться в структуру каталогов (rm */*/*.flac для 2 каталогов и т.д.). То же самое применяется к перемещению файлов:

mv */*.mp3 .

переместит все файлы на глубину 1 каталог и заканчивающиеся на .mp3 в текущий каталог. mv */*/*.mp3 . делает это на глубину 2 каталога.

Если у вас много подпапок (и не только 1 или 2 уровня вглубь), это переместит все найденные mp3 внутри текущего каталога, независимо от глубины, и поместит их в текущий каталог:

find . -iname "*.mp3" -exec mv {} . \;

Это удалит все файлы, оканчивающиеся на .flac, из текущего каталога, независимо от глубины:

find . -type f -name '*.flac' -exec rm {} \;

Что я обычно делаю, так это создаю новую папку ВНЕ текущего каталога и копирую все файлы mp3 в этот каталог, и когда вы подтверждаете, что это сделано правильно, удаляю каталог, который содержит все flac и каталоги. Это менее подвержено ошибкам.

Таким образом, если я нахожусь в /home/rinzwind/musicfiles/, я создам /home/rinzwind/mp3/ и сделаю что-то подобное в первую очередь.

find /home/rinzwind/musicfiles/ -iname "*.mp3" -exec mv {} /home/rinzwind/mp3/ \;

@David @Rinzwind,
Спасибо за ответ.
В Ubuntu 22.04 Beta я скопировал корневую папку, содержащую flacs, в временный каталог и запустил этот исполняемый скрипт в этом каталоге:

#/bin/bash
shopt -s globstar
for f in **/*.flac; do
   flac -cd "$f" | lame -b 320 - "${f%.*}".mp3 && rm "$f"
done

Эта операция удаляет все файлы flac. Размещение # перед ‘rm “$f” предотвращает удаление.

Вот что я использую на основе вышеизложенного:

#!/usr/local/bin/bash

shopt -s globstar

for d in **/; do
    mkdir "../MP3s/$d"
done

for f in **/*.flac; do
    if [ ! -e "../MP3s/${f%.*}".mp3 ]; then
        flac -cd "$f" | lame -b 320 - "../MP3s/${f%.*}".mp3 # && rm "$f"
    fi
done

for m in **/*.mp3; do
    if [ ! -e "../MP3s/${m%.*}".mp3 ]; then
        cp "$m" "../MP3s/${m%.*}".mp3
    Fi
done

for w in **/*.wav; do
    if [ ! -e "../MP3s/${w%.*}".mp3 ]; then
        lame -b 320 "$w" "../MP3s/${w%.*}".mp3
    fi
done

Ответ или решение

Чтобы переместить файлы .mp3 из подкаталогов в родительскую директорию и удалить подкаталоги, такие как "mp3" и .flac, вы можете воспользоваться терминалом в системе Linux. В данном случае мы можем использовать такие команды, как find, mv и rm. Попробуем подробно рассмотреть процесс.

Шаг 1: Удаление файлов .flac

Мы начнем с удаления всех файлов .flac в вашей музыкальной коллекции. Используем следующую команду:

find /путь/к/вашим/музыка -type f -name '*.flac' -exec rm {} +

Объяснение:

  • find – утилита для поиска файлов и каталогов.
  • /путь/к/вашим/музыка – путь к вашему корневому каталогу музыки (замените его на актуальный).
  • -type f – выбираем только файлы.
  • -name '*.flac' – ищем файлы с расширением .flac.
  • -exec rm {} + – выполняем команду rm для каждого найденного файла.

Шаг 2: Перемещение файлов .mp3 в родительскую директорию

Теперь переместим файлы .mp3 из всех подкаталогов в родительскую директорию. Используем следующую команду:

find /путь/к/вашим/музыка -type f -name '*.mp3' -exec mv {} /путь/к/вашим/музыка/ \;

Объяснение:

  • find и его параметры остаются теми же, что и в предыдущем шаге.
  • -exec mv {} /путь/к/вашим/музыка/ \; – перемещаем каждый найденный файл .mp3 в корневой каталог вашей музыкальной коллекции.

Шаг 3: Удаление пустых каталогов

После перемещения мы можем удалить пустые каталоги. Используем команду:

find /путь/к/вашим/музыка -type d -empty -exec rmdir {} +

Объяснение:

  • -type d – находим только каталоги.
  • -empty – выбираем только пустые каталоги.
  • -exec rmdir {} + – удаляем каждый найденный пустой каталог.

Важные замечания

  1. Резервное копирование: Перед выполнением этих команд рекомендуется сделать резервную копию вашей музыкальной коллекции. Команды rm и mv могут привести к потерям данных, если будут использованы некорректно.

  2. Проверка команд: Перед использованием команд можно проверить, какие файлы будут затронуты, выполнив команду find без -exec. Например:

    find /путь/к/вашим/музыка -type f -name '*.mp3'
  3. Тестирование на малом наборе данных: Если у вас много подкаталогов, начните с тестирования на небольшом наборе данных, чтобы убедиться, что команды работают так, как вы ожидаете.

Следуя данным шагам, вы сможете успешно переместить .mp3 файлы в родительский каталог и избавиться от ненужных подкаталогов и файлов.

Оцените материал
Добавить комментарий

Капча загружается...