【问题标题】:Nested find on the basis of two conditions基于两个条件的嵌套查找
【发布时间】:2017-04-25 09:48:09
【问题描述】:

我想查找以show 开头并在特定月份创建的文件。我已经尝试了以下

for i in  `find /home/data -type d -name "$MONTH"`;
    do  find $i -type f -name "show*" -printf "%h\n"|uniq >tempfile1;
done;

但我收到此错误:

-bash: /home/data/testdata/2017/Apr/25: Is a directory

我该如何解决这个问题?

【问题讨论】:

  • 请阅读格式化帮助!
  • 我的 Redhat 6.4 上没有出现此错误。它“按预期”工作,并列出了所有带有“显示”的目录......在您的系统上更具体一点
  • 现在它工作正常,但有另一个问题..只有最后列出的目录已在 tempfile1 中列出,否则我必须附加输出而不是使用以下语法重定向它... for i in find /home/data -type d -name "$MONTH";确实找到 $i -type f -name "show*" -printf "%h\n"|uniq >>tempfile1;完成;
  • 所以你修好了!做得好!随时回来提出另一个问题。
  • 您似乎正在尝试查找名称以“show”开头且路径组件与特定字符串匹配的文件。匹配父目录的名称与匹配创建时间有很大的不同。

标签: linux shell find


【解决方案1】:

如果您通过ShellCheck 运行一小段代码,就会发现几个问题:

  1. 不要循环使用find 的输出,而是使用-exec

  2. 您应该将$i 括在引号中,以防止出现通配符和分词。这可能是您的问题的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多