Bash 删除父文件夹,但保留子文件夹的内容

Bash 删除父文件夹,但保留子文件夹的内容,bash,Bash,我正试着整理一下我的音乐文件夹。现在它里面有很多子文件夹 在这些子文件夹中的每一个子文件夹中,都有一个子文件夹,其名称为Artister_,其中包含音乐文件 例如: 我可以列出Music_uu文件夹的内容,并使用以下命令获取子文件夹的名称: for i in $(ls -d */); do echo ${i%%/}; done 但是,当我试图将这些子文件夹的内容移动到父文件夹时,我无法实现我的目标。我正在使用以下代码: for i in $(ls -d */); do mv ${i%%/*}

我正试着整理一下我的音乐文件夹。现在它里面有很多子文件夹

在这些子文件夹中的每一个子文件夹中,都有一个子文件夹,其名称为Artister_,其中包含音乐文件

例如:

我可以列出Music_uu文件夹的内容,并使用以下命令获取子文件夹的名称:

for i in $(ls -d */); do echo ${i%%/}; done 
但是,当我试图将这些子文件夹的内容移动到父文件夹时,我无法实现我的目标。我正在使用以下代码:

for i in $(ls -d */); do mv ${i%%/*} .; done
实际上,它移动子文件夹,但不移动子文件夹的内容

关于如何实现它有什么想法吗


提前感谢

${i%%/*}
删除匹配的最长前缀/*;见:

$ i=Music_folder/silly_name003/artist_B_discB;
$ echo ${i%%/*}
Music_folder
您正在寻找这样的东西:

set ./*/
echo mv ./*/* .
echo rmdir "$@"
如果您对输出满意,请删除
echo
s


请注意,这不能处理名称冲突。

如果两个子目录包含同名文件,您是否担心名称冲突?@chepner,在这种情况下不会发生冲突,但我会将其保留在mindneat解决方案中!谢谢!
set ./*/
echo mv ./*/* .
echo rmdir "$@"