Bash脚本 - 对于使用find -exec cp的循环产生错误:cp:省略目录

时间:2016-04-27 01:02:34

标签: linux bash for-loop copy find

背景

我有两个图像文件夹... FOLDER ONE是包含数千个彩色图像的主文件夹。 FOLDER TWO是一个过滤的文件夹,我一直在寻找FOLDER ONE,但FOLDER TWO中的图像是黑白的。

特别提示 - FOLDER TWO中图像的文件名与FOLDER ONE +之后的其他信息相同(但在.jpeg扩展名之前)。

我的目标

在FOLDER ONE中搜索FOLDER ONE以获取文件名称的开头部分(以便我可以获取已过滤的图像的彩色副本),然后将这些图像复制到另一个名为PASS FOLDER的文件夹中。 / p>

我的代码

note - FOLDER ONE,TWO,PASS FOLDER = F1,F2,PASSED(分别)

for doc in F2/*
do
    name=`basename $doc`;
    name=${name%-*};
    find /home/user/F1/ -name "$name*" -exec cp {} /home/user/PASSED/ \;;
done

我的问题

我一直收到错误

  

cp:省略目录'/ home / user / F1 /'

请帮忙!我认为这应该是非常简单的,它只是一直有问题。我还自己测试了for循环的每个部分,它们都有效。我认为for循环搞砸了,但我不明白为什么。

2 个答案:

答案 0 :(得分:1)

问题是find正在处理cp目录以进行复制,而您只想复制文件。因此,替换:

find /home/user/F1/ -name "$name*" -exec cp {} /home/user/PASSED/ \;

使用:

find /home/user/F1/ -type f -name "$name*" -exec cp {} /home/user/PASSED/ \;

Thw谓词-type f告诉find仅匹配常规文件,而不是目录。

答案 1 :(得分:0)

只需添加-r参数。在cp之后

find /home/user/F1/ -name "$name*" -exec cp -r {} /home/user/PASSED/ \;;