你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Linux——fd是查找命令的一种更简单的替代方法

[复制链接]
gaosmile 发布时间:2020-10-19 16:19
在Linux上,fd是查找命令的一种更简单的替代方法。它有简化的语法,使用合理的默认值,现在让我们来看看吧。
, E" j. {1 C5 k) B
% E2 I% L9 |/ D, X+ P3 |+ R
fd 与 find 有什么区别?2 R/ G- [1 y; C/ o

; F" V* X, y( s1 i$ f, T! Z8 Y! Y! t

; S2 P; }& ]; C: X1 W" Jfd命令并不意味着要取代传统的find命令,后者在Linux上一直存在。相反,fd试图以更直接的方式满足find的大多数常用用法,而且它通常比find快八到九倍。您可以在项目的GitHub存储库页面上看到它的一些基准测试。% |9 L  s8 G/ N) A* u8 B5 E% e& ]
fd具有彩色输出,类似于某些ls模式。它是递归的,但默认情况下不搜索隐藏的目录。它了解Git,还将自动忽略“.gitignore”文件中的任何模式。
& H1 a1 o' _! `% ?, C+ o, Ofd默认不区分大小写。但是,如果您的搜索模式包含一个大写字母,fd将以区分大小写的模式运行。当然,您可以重写默认值,但是在许多情况下,它们对您是有利的。
# [. {7 T  G1 \5 U% J, B+ E# N. [; \
- x& F# o( O# p+ j6 d$ }

/ {5 h- m; m) I8 S安装fd
+ V$ m+ d1 c+ S! W# o% i& k& X1 A9 \7 N6 T. Q5 F

  {& j- w( f. n6 r5 {从Ubuntu 19.04(Disco Dingo)开始,您可以通过使用apt-get调用官方维护的软件包直接安装fd。如果您运行的是旧版Ubuntu,请查看GitHub页面上的安装说明。- P4 N+ _% S, H7 K( q
输入以下命令:* E$ P+ i: P1 `
linuxmi@linuxmi:~/www.linuxmi.com$ sudo apt-get install fd-find5 W# G) I: P9 {) k& C- F" h/ v1 Q
微信图片_20201019161930.png
- E1 t$ W& i9 n' p7 J在Ubuntu中,命令是fdfind,以避免与另一个现有的实用程序发生名称冲突。如果希望它是fd,可以设置一个别名:* }, V8 D- d  w* h6 j
linuxmi@linuxmi:~/www.linuxmi.com$ alias fd=fdfind# @+ C$ x2 y% F* \; Z
微信图片_20201019161937.png
. r# w9 v/ h1 T要使别名保持不变,以便在重新启动后仍然可用,请将其放入“ .bashrc”或“ .bash_aliases”文件中。$ n% N+ L9 @( O5 E! B& Z. z! G
要在Fedora上安装fd,请键入以下命令:
; S# V( g9 I; C: n" }7 Dsudo dfn install fd-find0 E' V1 m' G& Z  x  W1 s5 k$ L
在Manjaro上,键入以下内容:3 V: t, N, O: x, A' b
sudo pacman -Syu fd! j% [" m8 U, m) `2 g/ ~" j3 _
$ n% `- |9 a# v5 n# S9 o
. R+ P( w" j+ R% i2 f* b
fd与fdfind
) s# P' X! ?. l" F2 A
2 `( B" d3 G% Z* X
  C. M+ O/ P6 m
为避免混淆,我们在Ubuntu测试PC上保留了命令的默认名称fdfind。fd和fdfind是完全相同的命令,如下面的示例所示(如果您要求fdfind显示其版本,则称其为“ fd”):
$ E0 ^5 h: \' }3 ]/ W% j) l8 blinuxmi@linuxmi:~/www.linuxmi.com$ fdfind --version9 a( W, \. \3 b! R: k7 w) l: a/ c
微信图片_20201019161940.png
) \2 N# B& X$ o在示例中,我们将使用Ubuntu“ fdfind”。在其他Linux发行版中,可以键入“ fd”而不是“ fdfind”来保存一些击键。* l" X& u" T2 W2 p9 U" R8 r3 y. N

! W$ G, A( U: ~+ O
& k- c; R8 _8 e& R1 k( _( F& W, D
使用fd进行简单搜索) z3 A  f: b: c8 N. G. l9 E7 @
; v4 F( r( e* y' W
) u3 K  K3 w, r- Z. o& X/ z0 Y
如果使用不带命令行选项的fd,则其行为类似于ls,不同之处在于它默认情况下在子目录中列出文件。输入以下内容:linuxmi@linuxmi:~/www.linuxmi.com$ fdfind; F" m* m: ?  L. `) ?! Z
微信图片_20201019161943.png
3 {" ?# B' l5 f* `) f对于不同的文件类型和目录,输出以不同的颜色显示。
* G8 l3 m: d5 |3 S) Q' m要查看特定类型的文件,请使用-e(扩展名)选项。请注意,您不必在扩展名前加句点(.),也不区分大小写。* j. K# t8 i" x/ b7 \' o! v% z- g' a' T
例如,您可以键入以下内容:
# @5 p0 |* N8 |: W6 B6 Q  o/ X  Olinuxmi@linuxmi:~/www.linuxmi.com$ fdfind -e png5 c1 P$ v6 S8 x; `3 Y$ U% a
微信图片_20201019161946.png * @# @% V# K+ I4 K8 c
现在,列出的唯一文件是PNG图像文件。! J# W/ p' R5 F6 v) m
要查找单个文件,请在命令行上键入其名称,如下所示:
! W; s9 N; x  k- s) d6 llinuxmi@linuxmi:~/www.linuxmi.com$ fdfind linuxmi.png
4 q/ I; d/ {7 T 微信图片_20201019161949.png
9 B) S+ w. y" s  ]5 y找到该文件,并且该文件恰好在子目录中。我们不必告诉fd进行递归搜索。
4 C0 {. V; C& |5 J6 N- j( e2 U' Y& G要在特定目录中开始搜索,请在命令行上包含文件路径。以下命令将在“/etc”目录中开始搜索,并查找文件名中包含“passwd”的文件:
# |" P  j3 n0 slinuxmi@linuxmi:~/www.linuxmi.com$ fdfind passwd /etc
7 t7 B  }( p( Q* R  @/ T4 h2 t; } 微信图片_20201019161952.png & ^, j7 R' |( W! o6 n7 a8 h! I! t
在这里,我们搜索所有C源代码文件的名称中包含“linuxmi”的文件:
1 i  x  d: }3 H6 w+ Ilinuxmi@linuxmi:~/www.linuxmi.com$ fdfind -e c linuxmi+ a0 }" }2 s! s  p! C  [
找到了3个匹配的文件。
  O; ]5 Q, Z) h- M5 p' v2 l 微信图片_20201019162000.png 8 v# ^7 y$ @- k2 T- k6 G3 J
& A- j. g1 X( B: E  x

7 Z# r' F+ j  h0 H# f文件类型和区分大小写$ J" M6 R0 x6 z* ]# |& M/ N

& \5 j  M- X- b. e9 g: e

$ z( i, y+ P/ |1 I2 }您可以要求fd查找目录,文件(包括可执行文件和空文件)以及符号链接。您可以使用-t(type类型)选项,然后使用以下字母之一进行操作:
' s6 }3 F% w* P  a+ y
  • f: 文件
  • d: 目录
  • l: 符号链接
  • x: 可执行文件
  • e: 空文件

    4 m% j: b  _, g7 }7 h$ ?/ T' q  @* `
下面寻找一个名为images的目录:
linuxmi@linuxmi:~/www.linuxmi.com$ fdfind -td images
微信图片_20201019162003.png
找到匹配项,在当前目录下的一个子目录中。
让我们看看区分大小写如何与搜索模式一起工作。我们键入以下内容首先搜索文件名中包含“linux”的文件,然后搜索文件名中包含“Linux”的文件:
linuxmi@linuxmi:~/www.linuxmi.com$ fdfind -tf linux
微信图片_20201019162006.png
linuxmi@linuxmi:~/www.linuxmi.com$ fdfind -tf Linux
微信图片_20201019162009.png
在第一个命令中,我们使用了小写搜索模式,这导致fd以不区分大小写的方式进行操作。这意味着“linux”和“Linux”都是有效匹配。
第二个命令包含一个大写字符,这导致fd以区分大小写的方式进行操作。这意味着只有“Linux”是一个有效匹配。
* T. h. [9 `: T2 N" K- Q
命令执行
/ C9 Q7 c* e4 b) {
fd命令允许您启动另一个命令并在找到的每个文件上执行它。
假设我们知道源代码目录树中某处有一个Zip文件。我们可以使用以下命令来查找它,该命令搜索具有ZIP扩展名的文件:
linuxmi@linuxmi:~/linuxmi.com$ fdfind -e zip
微信图片_20201019162012.png
使用-x(exec)选项,您可以将找到的每个文件传递给另一个命令,以供其处理。例如,我们可以键入以下内容来调用unzip实用程序以解压缩我们的ZIP文件(“ {}”是代表找到的文件的占位符):
linuxmi@linuxmi:~/linuxmi.com$ fdfind -e zip -x unzip {}
这将解压缩当前工作目录中的文件。如果我们想把它解压缩到包含ZIP文件的目录中,我们可以使用以下占位符之一:
  • {} – 一个占位符,它将随着搜索结果的路径改变(wp-content/uploads/01.jpg)。
  • {.} – 类似于{},但不使用文件扩展名(wp-content/uploads/01)。
  • {/}:将被搜索结果的基本名称 (01.jpg)所取代的占位符。
  • {//}:发现路径的父目录(wp-content/uploading)。
  • {/.}:只有基本名称,没有扩展名(01)。

    # \  h+ }4 J3 O+ t, X
为了找到我们的ZIP文件并将其解压缩到包含它的目录中,我们可以使用unzip -d(目录)选项,并传入父目录占位符({//}):
linuxmi@linuxmi:~/linuxmi.com$ fdfind -e zip -x unzip {} -d {//}
微信图片_20201019162015.png
然后将ZIP文件定位并解压缩到其父目录中。
微信图片_20201019162018.png
  p* R& |0 B4 Z% T
总结
这是对fd命令的简要回顾,一些用户可能会发现fd命令更容易使用,也更快。正如本文前面提到的,fd并不是完全替代find,而是提供简单的用法、更容易的搜索和更好的性能。在您的武器库中,fd不需要太多的空间,是一个很好的工具。

+ h0 W6 `( D- [5 p7 D& M9 f! e. @5 y
赞 收藏 评论0 发布时间:2020-10-19 16:19

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版