Вопрос или проблема
Моя музыкальная коллекция содержит папки с именами «Имя артиста», многие из которых содержат подпапки с «Название альбома». Если в папке «Имя артиста» нет папок «Название альбома», то эта папка содержит файлы .flac и папку «mp3» с конвертированными в mp3 файлами flac. В папках «Имя артиста», которые содержат «Название альбома», папка mp3 находится в каждой подпапке «Название альбома». Вот что я хочу сделать:
- Удалить файлы .flac из каждой папки (мне не нужно их сохранять).
- Переместить файлы из папки mp3 в корневую папку.
- Удалить папку 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 {} +
– удаляем каждый найденный пустой каталог.
Важные замечания
-
Резервное копирование: Перед выполнением этих команд рекомендуется сделать резервную копию вашей музыкальной коллекции. Команды
rm
иmv
могут привести к потерям данных, если будут использованы некорректно. -
Проверка команд: Перед использованием команд можно проверить, какие файлы будут затронуты, выполнив команду
find
без-exec
. Например:find /путь/к/вашим/музыка -type f -name '*.mp3'
-
Тестирование на малом наборе данных: Если у вас много подкаталогов, начните с тестирования на небольшом наборе данных, чтобы убедиться, что команды работают так, как вы ожидаете.
Следуя данным шагам, вы сможете успешно переместить .mp3 файлы в родительский каталог и избавиться от ненужных подкаталогов и файлов.