我在 Bash 脚本中遇到了一个命令,其中我发现:
find /var/log/abcd -type f
上面的命令是在清理日志文件的情况下进行的。我知道有什么find
作用。
看过之后-type f
,我查看了它的手册页。我在手册页中看到了它BASH_BUILTINS(1)
命令下 -f 标志的描述type
是:-
The -f option suppresses shell function lookup, as with the command builtin.
以下是我的问题:
- 有什么用
type
? - 国旗有什么意义
-f
? type
使用withfind
命令有什么用?
[编辑]:-在阅读了到目前为止所有的评论和答案之后,我想谈谈我对-type option in command find
Vs的误解的原因type command
。这一切都发生了,因为我假设到目前为止只看到了简短的选项(在命令的情况下进行测试find
)单个减号“-”, 例子,ls -l
。大多数时候我都看到过很长的选择双减号“--”, 例子,ls --version
。
答案1
在这种情况下,type
与 bash 内置无关type
,稍后会详细介绍。
一点关于“类型”
BASH 内置type
命令为您提供有关命令的信息。因此:
$ type type
type is a shell builtin
语法是:
type [-tap] [name ...]
-t
:仅打印类型(如果找到)-a
:打印所有出现的命令,包括内置命令和其他命令。-p
:打印将在调用命令时执行的磁盘文件,或者不打印任何内容。
如果我们看time
,kill
并举cat
个例子:
$ type time kill cat
time is a shell keyword
kill is a shell builtin
cat is /bin/cat
$ type -t time kill cat
keyword
builtin
file
$ type -a time kill cat
time is a shell keyword
time is /usr/bin/time
kill is a shell builtin
kill is /bin/kill
cat is /bin/cat
$ type -ta time kill cat
keyword
file
builtin
file
file
现在,这指定如果您在 Bash shell 中并输入,则使用time some_cmd
bash 内置命令。time
要使用该系统,time
您可以执行以下操作/usr/bin/time some_cmd
。
确保使用系统命令(而不是内置命令)的一种常用方法是使用which
.
tt=$(which time)
然后用来$tt
调用系统time
。
有问题的命令
在这种情况下,它-type
是命令的一个选项find
。该选项采用一个参数来指定实体的类型。例子
find . -type f # File
find . -type d # Directory
还有更多,man find
其余的请检查一下。
要搜索您可以执行的特定选项(在 man 中):
/^\s*-类型Enter
然后n
用于下一个直到你找到它。
关于 shell 命令的一些知识
这有点个人的解读。
在这个特定的例子中,一些值得一提的事情是命令、选项、参数和管道。
这有点宽松,但在我的词汇中,我们简而言之:
- 命令:一个程序或者内置。
- 参数:命令字之后的实体。
- 选项:一个选修的范围。
- argument:必需的参数。
在命令规范中,方括号用于指定选项,并且可以选择小于/大于,用于指定参数。因此:
foo [-abs] [-t <bar>] <file> ...
foo [-abs] [-t bar] file ...
给出-a
-b
和-s
作为可选参数,以及file
必需参数。
-t
是可选的,但如果指定则采用必需的参数bar
。点表示可以占用多个文件。
这不是确切的规范,并且通常man
需要help
确定。
参数选项和输入的定位通常可能会混淆,但通常最好保持基于位置的方法,因为某些系统不处理参数的混合定位。举个例子:
chmod -R nick 722 foo
chmod nick 722 foo -R
两者都适用于某些系统,而后者则不适用于其他系统。
在您的确切命令中,所有参数都属于find
– 因此,如果您想知道某个属性man find
是正确的查找位置。如果您需要查看 shell 等的手册页,可以在例如:
find . $(some command)
find . `some command`
find . $some_var
find . -type f -exec some_command {} \;
find . -type f | some_command
...
是-exec
一种特殊的参数,其中-exec some_command {} \;
所有参数都赋予find
,但该部分在tosome_command {} \;
内进行了扩展。find
some_command string_of_found_entity
进一步
- 引用
- 扩张
- 命令替换
- 还有更多
答案2
你应该查看 in man find
,而不是help type
or man bash
。type
infind
将指定您需要的文件类型:
-type c
File is of type c:
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link; this is never true if the -L option or the
-follow option is in effect, unless the symbolic link is
broken. If you want to search for symbolic links when -L
is in effect, use -xtype.
s socket
D door (Solaris)
内置type
是完全不同的东西,它不是内部使用的find
。
答案3
您查看了错误的手册页,这不是命令type -f
,而是find -type f
完全不同的选项,请查看find
手册以获取正确的解释。
答案4
这不是您正在查看的正确手册页。你应该使用
man find
这会告诉您谓词-type f
仅-type
选择常规文件。