Como posso excluir todas as pastas de um nome específico sem excluir Conteúdo nele?

1

Como excluo todas as pastas com um nome específico (por exemplo, 128Kbps_Songs) sem excluir seus arquivos

Por exemplo, se eu tiver o diretório "MP3_SONGS" com subdiretórios "A", "B", "C" e cada subdiretório tiver o diretório MANY Contém o nome do filme "FILM_NAME1", "FILM_NAME2", "FILM_NAME3", In That Cada filme NAme Eu tenho pasta específica NAme (128Kbps_Songs) nesta pasta "128Kbps_Songs" Eu tenho esse filme MP3 Songs Files

como posso remover a pasta "128Kbps_Songs", em cada diretório Film_Name e tenho que pegar essas músicas mp3 em que FILM_NAME .. (Tem que apagar 128Kbps_Songs Pasta em todos os FILM_NAME sem excluir as músicas mp3 nele, tem que obter o mp3 no diretório 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)
    
por Chatcafe 17.01.2015 / 08:29

2 respostas

2

Crie um script simples com o seguinte conteúdo

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

Salve e torne-o executável usando chmod +x your_script

Agora execute-o usando ./your_script

Aqui IFS= é feito para preservar o espaço no nome do arquivo ou no caminho.

  • -r - desativa a interpretação de escapes de barra invertida e continuação de linha nos dados lidos.

  • -d - reconhece o delimitador como fim de dados. Aqui está esvaziando o IFS

  • dirname é usado para remover o último nome da pasta, por exemplo 128Kbps_Songs da saída do comando find. (por ./temp/MP3_SONGS/128Kbps_Songs to ./temp/MP3_SONGS )

por g_p 17.01.2015 / 15:43
2

Primeiro mova todos os arquivos MP3 para cima um nível pelo comando da seguinte forma:

find MP3_SONGS -type f -name '*.mp3' -execdir echo mv -v '{}' .. \;
  • A opção -type f procura todos os f iles
  • Os arquivos de filtro -name '*.mp3' que terminam com .mp3
  • O comando mv -v '{}' .. será executado para cada subdiretório contendo o arquivo correspondente, que normalmente não é o diretório no qual você iniciou a localização (ação do -execdir ).
  • A string '{}' especifica o nome do arquivo atual sendo processado em todos os lugares em que ocorre nos argumentos do comando.

Observação: Depois de executar o comando acima, remova o comando echo para executar o comando mv real.

Em seguida, tente excluir todos os diretórios vazios (diretórios 128Kbps_Songs ):

find MP3_SONGS -empty -type d -name '128Kbps_Songs' -delete
  • O arquivo -empty : está vazio e é um arquivo ou diretório regular.
  • A opção -type d é a mesma que -type f , mas isso procura todos os irórios d em seu lugar.
  • O -delete exclui o arquivo ou diretório encontrado.

Veja encontro do homem para mais informações.

    
por αғsнιη 17.01.2015 / 13:29