Как я удаляю все Папки с собственным именем (например, 128Kbps_Songs), не удаляя его файлы
Например, если у меня есть каталог "MP3_SONGS" с подкаталогами "A", "B", "C", и каждый подкаталог имеет каталог MANY, Содержит Пленочное Имя "FILM_NAME1", "FILM_NAME2", "FILM_NAME3" в нем, На То Каждое Пленочное Имя у меня есть определенное Имя папки (128Kbps_Songs) в этом "128Kbps_Songs" Папка, у меня есть Тот Фильм mp3 Songs Файлы
как я могу удалить Папку "128Kbps_Songs", в каталоге Each Film_Name и Иметь для получения этих песен в формате MP3 в этом FILM_NAME.. (Должны Удалить 128Kbps_Songs Папка во всем FILM_NAME, не удаляя песни в формате MP3 в нем, иметь для получения mp3 в Каталоге FILM_NAME..
MP3_SONGS (Parent Directory) ------ A , B, C
A (Sub Directory1) ------ FILM_NAME1 , FILM_NAME2
B (Sub Directory2) ------ FILM_NAME3 , FILM_NAME4
c (Sub Directory3) ------ FILM_NAME5 , FILM_NAME6
FILM_NAME1 (Directory) ---- 128Kbps_Songs (Directory) ------ FILM_NAME1 (MP3 Files)
FILM_NAME2 (Directory) ---- 128Kbps_Songs (Directory) ------ FILM_NAME2 (MP3 Files)
FILM_NAME3 (Directory) ---- 128Kbps_Songs (Directory) ------ FILM_NAME3 (MP3 Files)
FILM_NAME4 (Directory) ---- 128Kbps_Songs (Directory) ------ FILM_NAME4 (MP3 Files)
FILM_NAME5 (Directory) ---- 128Kbps_Songs (Directory) ------ FILM_NAME5 (MP3 Files)
FILM_NAME6 (Directory) ---- 128Kbps_Songs (Directory) ------ FILM_NAME6 (MP3 Files)
Need Files in:
FILM_NAME1 (Directory) ------ FILM_NAME1 (MP3 Files)
FILM_NAME2 (Directory) ------ FILM_NAME2 (MP3 Files)
FILM_NAME3 (Directory) ------ FILM_NAME3 (MP3 Files)
FILM_NAME4 (Directory) ------ FILM_NAME4 (MP3 Files)
FILM_NAME5 (Directory) ------ FILM_NAME5 (MP3 Files)
FILM_NAME6 (Directory) ------ FILM_NAME6 (MP3 Files)
Создайте простой сценарий со следующим содержанием
#!/bin/bash
while IFS= read -r -d '' n;
do
dir=$(dirname "$n") ;
mv "${n}"/* "${dir}"
rmdir "${n}"
done < <(find -type d -name "128Kbps_Songs" -print0)
Сохраните его и сделайте его исполняемым использованием chmod +x your_script
Теперь выполните его использование ./your_script
Здесь IFS=
сделан для сохранения пространства в имени файла или пути.
-r
- отключает interpretion Escape обратной косой черты и продолжения строки в данных чтения.
-d
- распознайте разделитель как конец данных. Здесь это опустошает IFS
dirname
использование должно удалить последнее имя папки т.е. 128Kbps_Songs
от вывода команды находки. (от ./temp/MP3_SONGS/128Kbps_Songs
кому: ./temp/MP3_SONGS
)
Первый шаг все файлы MP3 один уровень командой как следующее:
find MP3_SONGS -type f -name '*.mp3' -execdir echo mv -v '{}' .. \;
-type f
опция ищет все файлы-name '*.mp3'
файлы фильтра, которые заканчиваются .mp3
mv -v '{}' ..
будет выполнен для каждого подкаталога, содержащего подобранный файл, который обычно не является каталогом, в котором Вы запустили, находят (действие -execdir
).Примечание: После выполнения выше команды удалите echo
команда для выполнения фактического выполнения mv
команда.
Затем попытайтесь удалить все пустые каталоги (128Kbps_Songs каталоги):
find MP3_SONGS -empty -type d -name '128Kbps_Songs' -delete
-empty
: Файл пуст и является или регулярным файлом или каталогом.-type d
опция как то же как -type f
но это ищет все каталоги вместо этого.-delete
, удаляет найденный файл или каталог.Посмотрите, что человек находит для большего количества информации.