【问题标题】:/usr/bin/find: Argument list too long/usr/bin/find:参数列表太长
【发布时间】:2018-07-24 06:38:22
【问题描述】:

我知道这是一个常见错误,但我真的被困住了,需要一些帮助。

我需要在根文件夹Tabletop 中名为Parent 的子目录中创建所有文件的Excel 表。这就是我所拥有的:

find $(find /Volumes/COMMON-LIC-PHOTO/STUDIO-COMPLETE/ARCHIVE/Tabletop -type d -iname parent | xargs) -type f > Parent_Files_TT.csv

它会搜索名为 Parent 的文件夹,然后将完整的文件路径复制到 Excel。这适用于我拥有的其他较小的文件夹,但 Tabletop 中有数十万个文件,我收到错误:

/usr/bin/find: 参数列表太长

我已尝试将其修改为在查找文件时使用xargs

find $(find /Volumes/COMMON-LIC-PHOTO/STUDIO-COMPLETE/ARCHIVE/Tabletop -type d -iname parent | xargs) -type f -print0 | xargs > Parent_Files_TT.csv

也试过"*":

find $(find /Volumes/COMMON-LIC-PHOTO/STUDIO-COMPLETE/ARCHIVE/Tabletop -type d -iname parent | xargs) -type f -name "*" > Parent_Files_TT.csv

但我遇到了同样的错误。如果有人能帮我修改一下,我将不胜感激。

【问题讨论】:

  • 您不需要将xargs -0find ... -print0 配对吗?
  • 我非常有信心通过添加 -type f -print0 | 这确实有效。 xargs -0,但不幸的是我仍然得到同样的错误。
  • 我认为find $(...) 部分是这里的问题。你正在插入一个巨大的东西。尝试对其进行重组,以某种方式将第一个 find 的结果传递给第二个。

标签: bash


【解决方案1】:

这部分

find /Volumes/COMMON-LIC-PHOTO/STUDIO-COMPLETE/ARCHIVE/Tabletop \
    -type d -iname parent

返回太多结果,并且您的外部命令变得太长。您可以通过以不同方式嵌套 finds 来避免这种情况:

find /Volumes/COMMON-LIC-PHOTO/STUDIO-COMPLETE/ARCHIVE/Tabletop \
    -type d -iname parent \
    -exec find {} -type f \; > Parent_Files_TT.csv

【讨论】:

  • 是的,这有效!非常感谢。我知道这可能是代码,但不知道如何正确地将其分开。
【解决方案2】:

与其在你的 find 中放置一个 find,不如一次性完成:

find /Volumes/COMMON-LIC-PHOTO/STUDIO-COMPLETE/ARCHIVE/Tabletop \
    -ipath '*/parent/*' -type f

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 2014-08-30
    • 1970-01-01
    • 2021-11-16
    • 2020-05-08
    • 2011-03-12
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    相关资源
    最近更新 更多