如何删除所有具有特定名称的文件夹(例如 128Kbps_Songs)而不删除其文件
例如,如果我有目录“MP3_SONGS”,其中包含子目录“A”,“B”,“C”,并且每个子目录都有许多目录包含电影名称“FILM_NAME1”,“FILM_NAME2”,“FILM_NAME3”,在每个电影名称中我都有特定的文件夹名称(128Kbps_Songs),在这个“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)
答案1
创建包含以下内容的简单脚本
#!/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
用于128Kbps_Songs
从 find 命令输出中删除最后一个文件夹名称。(从./temp/MP3_SONGS/128Kbps_Songs
到./temp/MP3_SONGS
)
答案2
首先将所有 MP3 文件上移一级,命令如下:
find MP3_SONGS -type f -name '*.mp3' -execdir echo mv -v '{}' .. \;
- 该
-type f
选项查找所有F艾莱斯 -name '*.mp3'
以以下结尾的过滤文件.mp3
- 该命令
mv -v '{}' ..
将针对包含匹配文件的每个子目录运行,该子目录通常不是您启动 find( 的操作-execdir
)的目录。 - 字符串“{}”指定在命令参数中出现的当前文件名。
笔记:运行完上述命令后,删除该echo
命令即可执行运行实际的mv
命令。
然后尝试删除所有空目录(128Kbps_歌曲目錄):
find MP3_SONGS -empty -type d -name '128Kbps_Songs' -delete
- :文件
-empty
为空,是常规文件或目录。 - 该
-type d
选项与相同,-type f
但这适用于所有d目录。 -delete
, 删除找到的文件或目录。
看男人找到了解更多信息。