1

How do I delete all Folders with a specific name (e.g. 128Kbps_Songs) without deleting its files

For example if I have directory "MP3_SONGS" with subdirectories "A", "B", "C" and each subdirectory has MANY directory Contains Film Name "FILM_NAME1", "FILM_NAME2", "FILM_NAME3" in it, In That Each Film NAme I have specific Folder NAme (128Kbps_Songs) in this "128Kbps_Songs" Folder I have That Film mp3 Songs Files

how can I remove the Folder "128Kbps_Songs", in Each Film_Name directory and Have to get these mp3 songs in that FILM_NAME.. ( Have to Delete 128Kbps_Songs Folder in all FILM_NAME without deleting the mp3 Songs in it, have to get the mp3 in FILM_NAME Directory..

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)
6
  • If I understand correctly you want to move all "MP3 Files" from last sub-directory and then delete that sub-dir, right? if yes, you can use find command to find all files with -maxdepth 3 and move them into dest directory and then delete the empty dir Jan 17, 2015 at 8:06
  • Yes , Can You Provide the Code For That ???
    – Chatcafe
    Jan 17, 2015 at 8:20
  • Sorry For That :-( in Simple - want to move all "MP3 Files" from last sub-directory
    – Chatcafe
    Jan 17, 2015 at 8:31
  • want to move all "MP3 Files" from last sub-directory
    – Chatcafe
    Jan 17, 2015 at 8:35
  • no, have to delete 128Kbps_Songs directory, but have to move mp3 file from in 128Kbps_Songs to last sub-directory, if 128Kbps_Songs directory exits there only want this changes ..
    – Chatcafe
    Jan 17, 2015 at 9:05

2 Answers 2

2

Create a simple script with following contents

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

Save it and make it executable using chmod +x your_script

Now run it using ./your_script


Here IFS= is done to preserve the space in the filename or path.

  • -r - disables interpretion of backslash escapes and line-continuation in the read data.

  • -d - recognize delimiter as data-end. Here it is emptying out the IFS

  • dirname is use to remove the last folder name i.e 128Kbps_Songs from the find command output. (from ./temp/MP3_SONGS/128Kbps_Songs to ./temp/MP3_SONGS)

1
  • Thank You so Much ..... You saved my Time lot :-) Its Workingggggggggggggggggg
    – Chatcafe
    Jan 18, 2015 at 6:37
2

First move all MP3 files up one level by the command as following:

find MP3_SONGS -type f -name '*.mp3' -execdir echo mv -v '{}' .. \;
  • The -type f option looks for all files
  • The -name '*.mp3' filter files which end with .mp3
  • The command mv -v '{}' .. will be run for each subdirectory containing the matched file, which is not normally the directory in which you started find (action of the -execdir).
  • The string '{}' specifies the current file name being processed everywhere it occurs in the arguments to the command.

Note: After running above command, remove the echo command to perform running actual mv command.

Then try to delete all empty directories (128Kbps_Songs directories):

find MP3_SONGS -empty -type d -name '128Kbps_Songs' -delete
  • The -empty : File is empty and is either a regular file or a directory.
  • The -type d option as the same as -type f but this looks for all directories instead.
  • The -delete, deletes the found file or directory.

See man find for more info.

5
  • in this i have one problem .... :-( Some of FILM_NAME having Mp3 Directly in it, FILM_NAME1 -----> fileNum6_1.mp3 Suppose i move all MP3 files up one level i will get all mp3 out of FILM_NAME1 directory .. in this case what should i do !!!!!!
    – Chatcafe
    Jan 18, 2015 at 6:23
  • @Chatcafe please run tree MP3_SONGS and post the result on paste.ubuntu.com and then give me the link Jan 18, 2015 at 6:26
  • Thanks Brother for your Effort :-) its Really Helped me lot :-)
    – Chatcafe
    Jan 18, 2015 at 6:38
  • @Chatcafe the g_p's answer do the same which my answer do! then what is your problem with this????? Jan 18, 2015 at 6:42
  • paste.ubuntu.com/9773304 i made the changes like this :-)
    – Chatcafe
    Jan 18, 2015 at 6:52

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .