Linux 使用bash将文件复制到等级库文件夹
我有一个包含相当多子文件夹的文件夹。在某些子文件夹中,我有一张folder.jpg图片。我尝试做的是找到该文件夹并将其复制到所有其他子文件夹,这些子文件夹获得相同的艺术家和专辑信息,然后继续下一张专辑等 所有文件夹的结构都是“Linux 使用bash将文件复制到等级库文件夹,linux,bash,Linux,Bash,我有一个包含相当多子文件夹的文件夹。在某些子文件夹中,我有一张folder.jpg图片。我尝试做的是找到该文件夹并将其复制到所有其他子文件夹,这些子文件夹获得相同的艺术家和专辑信息,然后继续下一张专辑等 所有文件夹的结构都是“artist-year-album-[encoding information]”。 我已经做了一个非常简单的一行,找到文件夹,得到了文件,但我卡住了 ls -F | grep / | while read folders;do find "$folders" -name
artist-year-album-[encoding information]
”。
我已经做了一个非常简单的一行,找到文件夹,得到了文件,但我卡住了
ls -F | grep / | while read folders;do find "$folders" -name folder.jpg; done
有没有人有什么好的建议或想法来解决这个问题,或者给我们指点如何继续
编辑:
首先,我是个新手(你说不出来),所以请耐心点
好吧,让我更详细地解释一下
我的文件夹结构如下所示:
artist1 - year - album - [flac]
artist1 - year - album - [mp3]
artist1 - year - album - [AAC]
artist2 - year - album - [flac]
etc
我喜欢循环浏览具有相同艺术家和专辑信息的文件夹集,并查找folder.jpg
文件。当我找到该文件时,我希望将其复制到同一集中的所有其他文件夹中
例如,如果我在artist1-year-album-[flac]
文件夹中找到一个folder.jpg
,我想把这个folder.jpg
复制到artist1-year-album-[mp3]
&
艺人1年-专辑-[AAC]
但不是艺人2年-专辑-[flac]
继续循环,直到处理完所有集合。我真的希望这能让我更容易理解我想做什么:)
对于已经在所有编码中包含folder.jpg的集合来说,这是低效的,但是除非有错误,否则它应该可以完成这项工作。我知道这不是最有效或最正确的代码,但这对我来说是有效的,我在正确的文件夹中获得了正确的folder.jpg
IFS='
'
source=( `find . -name folder.jpg | sed 's/^..//' | sort -u` )
for s in ${source[@]}
do
fullname=(`echo $s | cut -d'/' -f1 | sort -u`)
checkname=`echo $fullname | cut -d'[' -f1 | sort -u`
match=( `find . -name "$checkname*" | sed 's/^..//' | sort -u` )
for a in ${match[@]}
do
if [[ "$a" == "$fullname" ]];
then
echo $a 'not copied'
else
echo $a
#echo $match '*M*'
cp $s "$a/folder.jpg"
fi
done
done
folder.jpg是否总是只有一个子文件夹?如果有多个folder.jpg,该怎么办?你不想保留原件还是不在乎?文件夹可以不止一个。jpg但我不想保留任何“原件”,只要上面写的是同一个“集”(艺术家-专辑)。该脚本的重要性/理念是,不会将错误的folder.jpg复制到错误的文件夹集中,并且所有文件夹都会获得正确的folder.jpg的副本。这有意义吗?简单的
找不到-name folder.jpg
够了吗?在我看来,你把事情复杂化了。。。另外,举一个“拥有这些和这些文件夹,而这些有folders.jpg和其他人没有,我希望……发生”的例子也不错,因为我不明白你真正想要的是什么。谢谢你的反馈。我用更多的信息更新了原来的帖子,希望这会对你有所帮助:)你可以使用cut
命令来提取目录名的公共部分。如果不行,我希望你能自己修复它-它足够小,可以理解它。J.F.Sebastian-这个例子没有显示出这种可能性:-)我认为把它们分散在一起是一种疯狂的组织。Franko知道这是否可能发生,或者同一张专辑的dir肯定是兄弟姐妹。IFS会处理它,并引用包含文件名的每个变量。@herby:我错过了它。你为什么不把它写成IFS=“\n”
?我现在已经测试过了,并且得到了一个命令替换:第3行:在寻找匹配的''和命令替换:第4行:语法错误:文件的意外结尾
我想在的@/folder\.jpg$@
之后缺少了一个,但是,即使添加了使脚本运行的内容,也不会复制folder.jpg。但我喜欢这个例子。希望能让我更深入地了解未来如何为此类任务构建shell脚本。
IFS='
'
source=( `find . -name folder.jpg | sed 's/^..//' | sort -u` )
for s in ${source[@]}
do
fullname=(`echo $s | cut -d'/' -f1 | sort -u`)
checkname=`echo $fullname | cut -d'[' -f1 | sort -u`
match=( `find . -name "$checkname*" | sed 's/^..//' | sort -u` )
for a in ${match[@]}
do
if [[ "$a" == "$fullname" ]];
then
echo $a 'not copied'
else
echo $a
#echo $match '*M*'
cp $s "$a/folder.jpg"
fi
done
done