Linux查找命令shell扩展

时间:2015-08-11 09:36:26

标签: linux sh glob

我只是对 find 命令无法理解的一个小问题。

我可以这样做:

[root@hostnaoem# ❯❯❯ls /proc/*/fd

但是这给了我一个错误:

[root@hostnaoem# ❯❯❯ find /proc/*/fd -ls
find: `/proc/*/fd': No such file or directory

即使我使用" / proc / / fd" / proc /" " / fd " / proc / * / fd"

我已经搜索了发现 shell扩展说了些什么,但我什么都没发现。有人可以告诉我为什么吗?

由于

2 个答案:

答案 0 :(得分:0)

如果您只是RTFM,您将了解到find的语法是:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

通常使用的子集是:

find whereToSearch (-howToSearch arg)*

fd中找到名为/proc的所有文件目录:

find /proc -name fd 

-name是最常见的howToSearch表达式:

  

-name pattern

          Base of  file  name  (the  path  with  the  leading  directories
          removed)  matches  shell  pattern  pattern.   The metacharacters
          (`*', `?', and `[]') match a `.' at the start of the  base  name
          (this is a change in findutils-4.2.2; see section STANDARDS CON‐
          FORMANCE below).  To ignore a directory and the files under  it,
          use  -prune; see an example in the description of -path.  Braces
          are not recognised as being special, despite the fact that  some
          shells  including  Bash  imbue  braces with a special meaning in
          shell patterns.  The filename matching is performed with the use
          of  the  fnmatch(3)  library function.   Don't forget to enclose
          the pattern in quotes in order to protect it from  expansion  by
          the shell.

(注意最后一句)

如果您的模式包含斜杠,则需要-path-wholename(同样的事情):

find /proc/ -wholename '/proc/[0-9]*/fd' 2>/dev/null 

您可能想要使用的其他表达式是:      -类型      -depth,-mindepth,-maxdepth      -user,-uid

有关每个搜索表达式的详细信息,请参阅find(1)。如果您要搜索终端内手册(man findman 1 find),可以使用/字符进入搜索模式(如大多数GUI应用中的Ctrl+F

使用带有globbing(ls)的*通常是代码气味。除非您使用-d标志,否则它将列出除匹配之外与glob模式匹配的目录的内容。 我发现echo globpattern形式通常更方便查看glob模式匹配的结果。

答案 1 :(得分:0)

这项工作:

SET @newnum = 0;

Update wp_esp_ticket tix

INNER JOIN (
SELECT TKT_ID FROM `wp_esp_ticket` et 
INNER JOIN wp_esp_datetime_ticket edtt on edtt.TKT_ID = et.TKT_ID
INNER JOIN wp_esp_datetime edt on edtt.DTT_ID = edt.DTT_ID
WHERE edt.EVT_ID = 1325
ORDER BY edt.DTT_EVT_start ASC
) b ON tix.TKT_ID = b.TKT_ID

SET tix.TKT_order = @newnum:=@newnum + 1

问候。