【问题标题】:Most appropriate way to pass argument in Unix Terminal在 Unix 终端中传递参数的最合适方法
【发布时间】:2017-08-30 23:23:29
【问题描述】:

我正在尝试在目录中找到一些具有给定字符串的文件,其中包含许多子目录和文件,

我知道 regex/glob 表达式可以匹配来自其他命令的目标文件和中间目录的名称。示例目录列表命令输出:

1234
5321
4546
2456

我正在尝试使用 find 和 grep 执行此操作,但我无法正确传递目录名称以使用 xargs 进行查找。最终命令是:

commandOutputDirs | xargs -d\n find /path/to/search/*/{} -type f -name "*fileName*"

但我收到以下错误 = find: paths must precede expression: 1234

当我尝试使用 echo 而不是 find 时

/path/to/search/*/{}

计算为

/path/to/search/path 1234

我是否需要以其他方式传递这些参数才能达到相同的效果?

【问题讨论】:

  • 很难理解你真正想要做什么!您是否正在寻找内容中包含字符串的文件?或者您正在寻找名称包含给定字符串的文件?或者您正在寻找路径包含给定字符串的文件?当您找到这些文件时,您想如何处理它们?
  • 抱歉不清楚。我需要找出给定字符串是否存在于具有特定名称的文件的某些目录中(我正在寻找日志文件中的错误)。我可以从 commandOutputDirs 中获取要在其中查找文件的子目录的名称。我也知道稍后要查找的字符串所在的文件的名称。我想获取文件列表,然后用 grep 查找该字符串。
  • 喜欢这个? find /tmp /etc/ /some/Where/Else -type f ...
  • 更多类似这样:find /path/to/hugeDir/subDir1 /path/to/hugeDir/subDir2 ... /path/to/hugeDir/subDirN -type f ...

标签: unix grep find xargs


【解决方案1】:

假设你有一个包含

的文件 pattern.txt
usr
etc
var

你可以这样做:

 while read line; do find /path/$line -type f -name "*filename*  < pattern.txt

如果是命令行输出,请执行以下操作:

commandLineOutput | while read line; do find /path/$line -type f -name "*filename*

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多