如何匹配两个目录中部分匹配的文件名并在找到的内容上执行命令

时间:2019-05-18 08:13:55

标签: linux bash

我试图匹配两个目录,如果文件存在于第二个目录中,我想将文件从第一个目录移到第三个目录。

文件名不完全匹配,它们在名称的末尾带有“ _ica”和其他扩展名。

我试图编写一个遍历dir1的脚本,检查它是否在dir2中 如果找到,则移至dir3:

DATA= /home/eegfilesonlyWM/*
PROCESSED= /home/eegfilesonlyWM/icaddata/*

DONE= /home/eegfilesonlyWM/done/

for f in $DATA ; do 
  fname=${f##*/}
  fname=${fname%/}

 find /home/eegfilesonlyWM/icaddata/ -iname  "${fname*_ica*}" -type f -exec mv {} ./done \; 

done 

我想从第一个目录复制那些在第二个目录中已经有相应文件的文件。

谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

也许这会做您想要的:

#!/usr/bin/env bash

#Directory paths here
DATA=./DATA
PROCESSED=./PROCESSED 
DONE=./DONE

#Do the test and copy here
for f in `ls -1 $DATA`; do
    #build output name
    p="$PROCESSED/${f/\.xxx/}";    #xxx is the file extension of original
    p="${p}_ica.yyy";              #yyy is the file extension of the processed
    if [ -f  $p ] ; then           
        cp $DATA/$f $DONE
    fi
done