Как я могу удалить все папки собственного имени, не удаляя Содержание в нем?

Как я удаляю все Папки с собственным именем (например, 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)
1
задан 17 January 2015 в 15:28

2 ответа

Создайте простой сценарий со следующим содержанием

#!/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)

2
ответ дан 3 December 2019 в 07:03

Первый шаг все файлы 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, удаляет найденный файл или каталог.

Посмотрите, что человек находит для большего количества информации.

2
ответ дан 3 December 2019 в 07:03

Другие вопросы по тегам:

Похожие вопросы: