【问题标题】:How can you use variable for the path argument for the Unix find command?如何将变量用于 Unix find 命令的路径参数?
【发布时间】:2012-04-13 11:20:06
【问题描述】:

Unix 命令 find 没有做我想做的事。 情况是这样的

如果我输入: find ../tmp -name "\*tmp\*"

正确输出tmp文件夹中名称中包含“tmp”的文件

但是当我输入时:

dir=../tmp #assign ../tmp as a variable named dir

find ${dir} -name "\*tmp\*"

输出显示:没有这样的文件或目录

我的猜测是 find 命令假定变量“dir”作为要查找的文件? 我该如何解决这个问题? 我想知道这一点的原因是我可以将路径作为我的脚本的参数传递。 谢谢

-----------补充说明

我使用 bash shell。 对困惑感到抱歉。上面的代码有效。真正的问题是当我在变量中加入 {} 结构时。例如, 当我输入时

dir=../{tmp1,tmp3} #assign ../{tmp1,tmp3} 作为一个名为 dir 的变量

找到 ${dir} -name "*tmp*"

输出显示:没有这样的文件或目录 为什么??

【问题讨论】:

  • 您发布的内容应该起作用。你能给出更准确的命令列表和确切的结果吗?你用的是哪个外壳?
  • 您输入的内容对我有用。无论您使用变量扩展${dir} 还是文字字符串../tmp,都应该得到完全相同的输出。您确定调用这两个命令的方式和时间没有什么不同吗?在这两种情况下,您当前的工作目录是否相同?
  • 你用的是什么外壳? tcsh?重击?克什?可能是 bash,但请具体说明。不同的 shell 有不同的变量赋值方式。
  • 很抱歉给您带来了困惑。我更新了问题!谢谢

标签: linux unix variables path find


【解决方案1】:

首先以命令方式对命令行进行评估,然后执行任何操作(如设置环境变量、调用程序)。因此 $dir 不是在评估命令行之前设置的。解决该问题的一种可能性是将变量设置与其使用分开;

dir=../tmp ; find "$dir" -name "tmp"

或将命令写入两个单独的行(Thiruvalluvar 的回答)。

dir=../tmp
find "$dir" -name "tmp"

【讨论】:

    【解决方案2】:

    这样就可以了:

    (从命令行)

    # dir="../tmp/whatever/your/directory"
    # find $dir -name "*tmp*"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 2012-12-09
      • 2011-02-08
      • 2015-10-16
      • 1970-01-01
      • 2016-04-18
      • 2021-06-15
      相关资源
      最近更新 更多