使用bash查找文件并复制到另一个位置并减少文件夹的深度

时间:2010-04-01 10:37:54

标签: bash copy find directory

我正在尝试恢复配合硬盘,没有任何结构,所以音乐和图像无处不在,但在命名文件夹有时> 5个文件夹深,我设法写了一个发现的单行文件并将它们复制到已安装的驱动器,但它完全保留了文件结构。我所追求的是一些代码,它可以搜索驱动器并复制到另一个位置,只复制包含mp3 / jpg文件的父文件夹,而不是完整路径。我的另一个问题是音乐是/folder/folder/folder/Artist/1.mp3..2.mp3..10.mp3等等所以我必须保留文件夹'艺术家'给他任何寻找的希望他的曲目了。

我目前的工作:

find /media/HP/ -name *.mp3 -fprintf /media/HP/MUSIC/Script.sh 'mkdir -p "/media/HP/MUSIC/%h" \n cp "%h/%f" "/media/HP/MUSIC/%h/"\n'

然后我运行script.sh并完成所有复制。

非常感谢

3 个答案:

答案 0 :(得分:1)

你可能想做的事情将是:

mkdir "$dest/$(basename $(dirname $source))"

答案 1 :(得分:1)

好的伙计们 - 感谢他的投入让我更深入地思考这个问题,并在同事的帮助下得出结果(感谢SiG):

这个单行查找文件,并编写一个脚本文件单独运行,但最初只复制到最后一个文件夹。

守则:

find /some/folder/ -name *.mp3 |  awk 'BEGIN{FS="/"}{print "mkdir -p \"/some/new/place/" $(NF-1) "\"\ncp -v -p \"" $0 "\" \"/some/new/place/" $(NF-1) "/" $NF "\""}' > script.sh

输出结果为:

mkdir -p "/media/HP/MUSIC/Satize"  cp -v -p "/media/HP/Users/REBEKAH/Music/Satize/You Don't Love Me.mp3" "/media/HP/MUSIC/Satize/You Don't Love Me.mp3"

当运行script.sh时,它会完成所有工作,最终我会将一个非常简化的文件结构复制到新驱动器中。

再次感谢大家们的赞赏。 KJF

答案 2 :(得分:0)

如果你以递归方式进行操作(按目录输入目录),你可以做的就是每次保存你的路径:Road_Dir=$(pwd)(比方说dir1 / dir2 / dir3 /)

然后你检测到你保存的artist_name目录是Music_Dir=$(pwd) 最后,您可以使用简单的命令提取您的artist_name目录:

Final_Dir=${Music_Dir##$Road_Dir/}(意思是从$ Music_Dir左边的$ Music_Dir取出字符串$ Road_Dir /)

此Final_Dir将包含artist_name,您可以将音乐文件复制为$ Final_Dir / Music.mp3 ...