gpt4 book ai didi

linux - 用于移动文件及其父目录的 Bash 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 10:38:27 25 4
gpt4 key购买 nike

我进行了搜索,很多主题都围绕着我要完成的目标展开。我有超过 2,000 个 m4a 文件和 17,000 个 mp3。目录结构为/home/me/Music/MP3/Artist/Album/song.m4a。我想使用“查找”来发现 m4a 歌曲,将它们及其专辑目录和艺术家目录移动到 /home/me/Music/M4A/Artist/Album/song。 m4a。我使用 mv -exec 开关不成功,使用 basename 和/或 dirname 创建脚本也不成功。父目录和祖父目录让我丢了。移动文件本身不是问题,只需创建目录结构 移动文件即可。在零碎的努力中,我导出了文件列表 find/home/me/Music/MP3 -name "*.m4a">> dir.sh (部分原因是我想查看文件位置和# 歌曲)。然后我运行 sed 's/MP3/M4A/g' dir.sh 将 MP3 替换为 M4A。从 dir.sh 中删除 song.m4a 将给我留下一个 Artist/Album 目录列表,以使用 mkdir 运行 while 循环:/home/me/Music/M4A/Metallica/Re-load/Metallica - The Unforgiven.m4a.不幸的是,这就是我被卡住的地方,dirname 产生一个 '.'

最佳答案

find /home/me/Music/MP3 -name \*.m4a| sed -e 's/.*/mkdir -p $(dirname "&"); mv "&" "&"M4A;/' | sed -e 's/MP3\([^"]*\)"M4A$/M4A\1"/' > moveit_baby.sh
bash moveit_baby.sh

应该完成这项工作,但在调用之前检查“moveit_baby.sh”。

根据您的 sed 实现,您将需要在第二个 sed 中使用 \(\) 或普通的 ()当然,字符串 "MP3" 不应是艺术家、专辑或歌曲名称的一部分,否则您需要更复杂的过滤器,请参见下文。

只有当目录名发生变化时,您才可以在插入 mkdir -p 时进一步优化。使用 while read 循环

可以更好地实现对输入参数的这种更复杂的决策
find /home/me/Music/MP3 -name \*.m4a | while read file
do
# do anything you want to $file here
done

关于linux - 用于移动文件及其父目录的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com