ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux – find命令不起作用:“非法选项 – n”

2019-08-14 05:50:47  阅读:11  来源: 互联网

标签:linux find



我的命令看起来像这样

find $PATH -name '$FILE.log' > /tmp/file-list.txt

并且我不断收到一条错误消息

find: illegal option -- n

我在这做错了什么?

解决方法:

从那个错误信息,我敢打赌

>尽管你的“linux”标签,你可能不在基于Linux的系统上,因为基于Linux的系统上常见的查找实现不会对未知选项的错误使用该措辞
> $PATH变量未设置(表示您运行的shell可能是Bourne或Korn shell(AT& T实现)).

这种非法选项是传统Unix查找实现中常见的措辞.

在使用类似-name的谓词之前,这些传统实现还需要至少一个文件参数.

否则,如果它是find之后的下一个参数,则-name将被视为选项(而不是谓词).

-n(-name中的第一个选项 – -n -a -m -e的缩写)不是有效的查找选项.

所以很可能,$PATH的扩展根本没有任何争论.

在以下情况下会发生这种情况:

> $PATH未设置
> $PATH设置为空字符串
> $PATH仅包含空格,制表符或换行符(默认值$IFS).

由于$PATH是一个特殊变量,包含一个冒号分隔的目录列表,用于查找可执行文件,包括find命令,我们可以排除3,最可能是2(除非当前目录中有find命令),否则你就是得到一个find:命令找不到错误.

当$PATH未设置(上面的1)时,在execvp()中(通常由env或find的-exec谓词使用)和某些shell(包括通常在那些传统操作系统上找到的Korn和Bourne shell),find将是通过在默认搜索路径中搜索找到(像bash这样的shell不会这样做但是在启动时取消设置时将$PATH设置为默认值).

在这里,我想你想:

>使用与$PATH不同的变量名来存储目录名(如$dir)
>一定要引用你的变量
>如果您想要默认为当前目录,如果$dir为空或未设置,请使用${dir: – .}.
>(也许还要调查为什么$PATH变量未设置,这是非常不寻常的)

所以:

dir=some-dir
find "${dir:-.}" -name "$FILE.log"

请注意,它假定$dir不以 – 开头 – 并且不是查找运算符(如!,(,))并且$FILE不包含通配符(*,?,[…])(注意在$FILE.log周围使用双引号而不是单引号,因为我假设您要查找名为something.log的文件,其中某些内容是$FILE,而不是名为$FILE.log的文件.



标签:linux,find

专注分享技术,共同学习,共同进步。

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有