如何删除特定名称的所有文件夹而不删除其中的内容?

如何删除具有特定名称的所有文件夹(例如128Kbps_Songs)而不删除其文件

例如,如果我的目录“MP3_SONGS”具有子目录“A”,“B”,“C”,并且每个子目录都有MANY目录包含电影名称“FILM_NAME1”,“FILM_NAME2”,“FILM_NAME3”,其中每个电影NAme我在这个“128Kbps_Songs”文件夹中有特定的文件夹NAme(128Kbps_Songs)我有那个电影mp3歌曲文件

如何在每个Film_Name目录中删除文件夹“128Kbps_Songs”并且必须在该FILM_NAME中获取这些mp3歌曲..(必须删除所有FILM_NAME中的128Kbps_Songs文件夹而不删除其中的mp3歌曲,必须在FILM_NAME中获取mp3目录..

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 - 禁用读取数据中反斜杠转义和行继续的解释。

  • -d - 将分隔符识别为数据结尾。 这里是排空IFS

  • dirname用于从find命令输出中删除最后一个文件夹名称,即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'filter文件以.mp3结尾
  • 命令mv -v '{}' ..将为包含匹配文件的每个子目录运行,该文件通常不是您开始查找的目录( -execdir )。
  • 字符串“{}”指定在命令的参数中出现的任何位置处理的当前文件名。

注意:执行上述命令后,删除echo命令以执行运行实际的mv命令。

然后尝试删除所有空目录 ( 128Kbps_Songs目录):

 find MP3_SONGS -empty -type d -name '128Kbps_Songs' -delete 
  • -empty :文件为空,是常规文件或目录。
  • -type d选项与-type f相同,但这会查找所有的drereies。
  • -delete删除找到的文件或目录。

有关详细信息,请参阅man find 。