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

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

如何删除所有具有特定名称的文件夹(例如 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, 删除找到的文件或目录。

男人找到了解更多信息。

相关内容