使用bash将文件复制到spec文件夹

时间:2011-11-16 20:25:09

标签: linux bash

我有一个包含大量子文件夹的文件夹。在一些子文件夹中,我有一个folder.jpg图片。我尝试做的是找到该文件夹​​并将其复制到所有其他具有相同艺术家和专辑信息的子文件夹,然后继续下一个专辑等。

所有文件夹的结构都是“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文件。当我找到该文件时,我是否喜欢将其复制到同一组中的所有其他文件夹中。

如果我在folder.jpg文件夹中找到一个artist1 - year - album - [flac],我希望将folder.jpg复制到artist1 - year - album - [mp3]& artist1 - year - album - [AAC]但不是艺术家2年 - 专辑 - [flac]。

继续循环,直到处理完所有集合。我真的希望能让我更容易理解我的尝试:)

2 个答案:

答案 0 :(得分:1)

IFS='
'
FLDRS=`find . -name folder.jpg | grep -v ./folder.jpg | sed -e 's@/folder\.jpg$@@`
for F in $FLDRS; do
  NOENC=`echo "$F" | sed -e 's/\[.*$//'`
  for DST in "$NOENC*"; do
    if [ -d "$DST" -a ! -f "$DST/folder.jpg" ]; then
      cp "$F/folder.jpg" "$DST"
    fi
  done
done

对于包含所有encondings中的folder.jpg的集合来说效率很低,但除非出现错误,否则它应该完成工作。

答案 1 :(得分:1)

我知道它不是最有效或最正确的代码,但这对我来说很合适,我在正确的文件夹中找到了正确的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