如何删除特定名称的所有文件夹而不删除其中的内容?
如何删除具有特定名称的所有文件夹(例如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 。