【问题标题】:Bash Script - For loop using find -exec cp produces error: cp: omitting directoryBash 脚本 - 使用 find -exec cp 的 For 循环会产生错误:cp: omitting directory
【发布时间】:2016-04-27 01:02:33
【问题描述】:

背景

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

特别说明 – 文件夹二中的图像文件名与文件夹一中的相同+之后的一些其他信息(但在 .jpeg 扩展名之前)。

我的目标

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

我的代码

note – 文件夹 1、2、PASS 文件夹 = 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 循环搞砸了,但我不明白为什么。

【问题讨论】:

    标签: linux bash for-loop copy find


    【解决方案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 仅匹配常规文件,而不匹配目录。

    【讨论】:

    • 就是这样!非常感谢!我被困了一段时间。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 2012-08-17
      • 2018-12-09
      • 2019-01-25
      • 2018-04-06
      • 2017-04-17
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      相关资源
      最近更新 更多