自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

fd:一個(gè)比Find簡(jiǎn)單十倍的文件查找命令

開(kāi)發(fā) 前端
今天給大家?guī)?lái)一個(gè)超級(jí)實(shí)用的小工具——fd。這貨是干嘛的呢?簡(jiǎn)單來(lái)說(shuō),它就是用來(lái)在你的文件系統(tǒng)中查找文件和目錄的。想象一下,你在一大堆文件中找一個(gè)特定的文件,手動(dòng)找得眼花繚亂?別擔(dān)心,fd來(lái)拯救你!

今天給大家?guī)?lái)一個(gè)超級(jí)實(shí)用的小工具——fd。這貨是干嘛的呢?簡(jiǎn)單來(lái)說(shuō),它就是用來(lái)在你的文件系統(tǒng)中查找文件和目錄的。想象一下,你在一大堆文件中找一個(gè)特定的文件,手動(dòng)找得眼花繚亂?別擔(dān)心,fd來(lái)拯救你!

fd是find命令的一個(gè)替代品,但它更簡(jiǎn)單、更快,而且用起來(lái)更順手。它可能不支持find所有的強(qiáng)大功能,但對(duì)于大多數(shù)使用場(chǎng)景來(lái)說(shuō),它提供了合理的(有觀點(diǎn)的)默認(rèn)設(shè)置。接下來(lái),咱們就來(lái)看看怎么用這個(gè)小家伙吧!

特點(diǎn)

  • 直觀的語(yǔ)法:用fd PATTERN代替find -iname '*PATTERN*'。
  • 支持正則表達(dá)式(默認(rèn))和通配符模式。
  • 由于并行遍歷目錄,速度非??臁?/li>
  • 使用顏色來(lái)高亮不同的文件類型(和ls命令一樣)。
  • 支持并行命令執(zhí)行。
  • 智能大小寫(xiě):默認(rèn)情況下搜索是不區(qū)分大小寫(xiě)的。如果模式中包含大寫(xiě)字符,它就會(huì)切換到區(qū)分大小寫(xiě)。
  • 默認(rèn)情況下,忽略隱藏目錄和文件。
  • 默認(rèn)情況下,忽略你的.gitignore中的模式。
  • 命令名字比f(wàn)ind短了50%。

如何使用

首先,如果你想快速了解所有可用的命令行選項(xiàng),可以運(yùn)行fd -h來(lái)獲取簡(jiǎn)潔的幫助信息,或者運(yùn)行fd --help來(lái)獲取更詳細(xì)的版本。

簡(jiǎn)單搜索

fd的設(shè)計(jì)目的就是在你的文件系統(tǒng)中查找條目。最基本的搜索你能做的就是用一個(gè)參數(shù)運(yùn)行fd:搜索模式。比如,你想找一個(gè)包含"netfl"的老腳本:

> fd netfl
Software/python/imdb-ratings/netflix-details.py

如果我們只用一個(gè)參數(shù)這樣調(diào)用fd,它會(huì)遞歸地在當(dāng)前目錄中搜索包含模式"netfl"的任何條目。

正則表達(dá)式搜索

搜索模式被視為正則表達(dá)式。這里,我們搜索以"x"開(kāi)頭以"rc"結(jié)尾的條目:

> cd /etc
> fd '^x.*rc$'
X11/xinit/xinitrc
X11/xinit/xserverrc

fd使用的正則表達(dá)式語(yǔ)法在這里有文檔說(shuō)明。

指定根目錄

如果我們想搜索一個(gè)特定的目錄,可以將其作為第二個(gè)參數(shù)傳遞給fd:

> fd passwd /etc
/etc/default/passwd
/etc/pam.d/passwd
/etc/passwd

遞歸列出所有文件

fd可以不帶任何參數(shù)調(diào)用。這對(duì)于快速概覽當(dāng)前目錄中的所有條目(遞歸地,類似于ls -R)非常有用:

> cd fd/tests
> fd
testenv
testenv/mod.rs
tests.rs

如果你想用這個(gè)功能來(lái)列出給定目錄中的所有文件,你必須使用一個(gè)通配符模式,比如.或^:

> fd . fd/tests/
testenv
testenv/mod.rs
tests.rs

搜索特定文件擴(kuò)展名

多時(shí)候,我們對(duì)某種類型的所有文件感興趣。這可以通過(guò)-e(或--extension)選項(xiàng)來(lái)實(shí)現(xiàn)。這里,我們搜索fd倉(cāng)庫(kù)中所有的Markdown文件:

> cd fd
> fd -e md
CONTRIBUTING.md
README.md

-e選項(xiàng)可以與搜索模式結(jié)合使用:

> fd -e rs mod
src/fshelper/mod.rs
src/lscolors/mod.rs
tests/testenv/mod.rs

搜索特定文件名

要找到與提供的搜索模式完全匹配的文件,可以使用-g(或--glob)選項(xiàng):

> fd -g libc.so /usr
/usr/lib32/libc.so
/usr/lib/libc.so

隱藏和忽略的文件

默認(rèn)情況下,fd不搜索隱藏目錄,也不會(huì)在搜索結(jié)果中顯示隱藏文件。要禁用這種行為,我們可以使用-H(或--hidden)選項(xiàng):

> fd pre-commit
> fd -H pre-commit
.git/hooks/pre-commit.sample

如果我們?cè)诎?/span>含Git倉(cāng)庫(kù)的目錄中工作(或包含Git倉(cāng)庫(kù)),fd不會(huì)搜索(也不會(huì)顯示)匹配.gitignore模式的文件夾和文件。要禁用這種行為,我們可以使用-I(或--no-ignore)選項(xiàng):

> fd num_cpu
> fd -I num_cpu
target/debug/deps/libnum_cpus-f5ce7ef99006aa05.rlib

要真正搜索所有文件和目錄,只需將隱藏和忽略功能結(jié)合起來(lái)顯示所有內(nèi)容(-HI),或使用-u/--unrestricted。

匹配完整路徑

認(rèn)情況下,fd只匹配每個(gè)文件的文件名。然而,使用--full-path或-p選項(xiàng),你可以匹配完整路徑。

> fd -p -g '**/.git/config'
> fd -p '.*/lesson-\\d+/[a-z]+.(jpg|png)'

命令執(zhí)行

除了僅僅顯示搜索結(jié)果,你通常還想對(duì)它們做點(diǎn)什么。fd提供了兩種方法來(lái)為你的每個(gè)搜索結(jié)果執(zhí)行外部命令:

  • -x/--exec選項(xiàng)為每個(gè)搜索結(jié)果運(yùn)行一個(gè)外部命令(并行)。
  • -X/--exec-batch選項(xiàng)啟動(dòng)一次外部命令,將所有搜索結(jié)果作為參數(shù)。

示例

遞歸查找所有zip壓縮文件并解壓它們:

如果有兩個(gè)這樣的文件,file1.zip和backup/file2.zip,這將執(zhí)行unzip file1.zip和unzip backup/file2.zip。如果文件足夠快地被發(fā)現(xiàn),這兩個(gè)unzip進(jìn)程將并行運(yùn)行。

找到所有的.h和.cpp文件,并用clang-format -i就地自動(dòng)格式化它們:

> fd -e h -e cpp -x clang-format -i

注意,clang-format的-i選項(xiàng)可以作為一個(gè)單獨(dú)的參數(shù)傳遞。這就是為什么我們把-x選項(xiàng)放在最后。

找到所有的test_*.py文件并在你最喜歡的編輯器中打開(kāi)它們:

注意,我們這里使用大寫(xiě)的-X來(lái)打開(kāi)單個(gè)vim實(shí)例。如果有兩個(gè)這樣的文件,test_basic.py和lib/test_advanced.py,這將運(yùn)行vim test_basic.py lib/test_advanced.py。

要查看文件權(quán)限、所有者、文件大小等詳細(xì)信息,你可以讓fd通過(guò)運(yùn)行l(wèi)s為每個(gè)結(jié)果顯示它們:

> fd … -X ls -lhd --color=always

這個(gè)模式非常有用,以至于fd提供了一個(gè)快捷方式。你可以使用-l/--list-details選項(xiàng)以這種方式執(zhí)行l(wèi)s:fd … -l。

-X選項(xiàng)結(jié)合fd和ripgrep (rg)使用也很有用,以便在某個(gè)特定類別的文件中搜索,比如所有的C++源文件:

> fd -e cpp -e cxx -e h -e hpp -X rg 'std::cout'

將所有.jpg文件轉(zhuǎn)換為.png文件:

> fd -e jpg -x convert {} {.}.png

這里,{}是一個(gè)占位符,將被搜索結(jié)果的路徑替換(documents/images/party.jpg)。{.}和{}類似,但沒(méi)有文件擴(kuò)展名(documents/images/party)。{/}是一個(gè)占位符,將被搜索結(jié)果的基礎(chǔ)名替換(party.jpg)。{//}是發(fā)現(xiàn)路徑的父目錄(documents/images)。{/.}是基礎(chǔ)名,擴(kuò)展名已去除(party)。如果你不包括一個(gè)占位符,fd會(huì)自動(dòng)在最后添加一個(gè){}。

并行與串行執(zhí)行

對(duì)于-x/--exec,你可以使用-j/--threads選項(xiàng)控制并行作業(yè)的數(shù)量。使用--threads=1進(jìn)行串行執(zhí)行。

排除特定的文件或目錄

有時(shí)候我們想要忽略來(lái)自特定子目錄的搜索結(jié)果。例如,我們可能想要搜索所有隱藏的文件和目錄(-H),但排除所有來(lái)自.git目錄的匹配項(xiàng)。我們可以使用-E(或--exclude)選項(xiàng)來(lái)實(shí)現(xiàn)這一點(diǎn)。它接受一個(gè)任意的glob模式作為參數(shù):

我們也可以使用它來(lái)跳過(guò)掛載的目錄:

> fd -E /mnt/external-drive …

..或者跳過(guò)某些文件類型:

要使這些排除模式永久化,可以創(chuàng)建一個(gè).fdignore文件。它們的工作方式類似于.gitignore文件,但是特定于fd。例如:

> cat ~/.fdignore
/mnt/external-drive
*.bak

注意

fd還支持其他程序使用的.ignore文件,如rg或ag。如果你想讓fd全局忽略這些模式,可以將它們放在fd的全局忽略文件中。這通常位于macOS或Linux的~/.config/fd/ignore中,Windows中位于%APPDATA%\fd\ignore。

刪除文件

你可以使用fd刪除所有與你的搜索模式匹配的文件和目錄。如果你只想刪除文件,可以使用--exec-batch/-X選項(xiàng)調(diào)用rm。例如,要遞歸刪除所有.DS_Store文件,請(qǐng)運(yùn)行:

fd -H '^\.DS_Store$' -tf -X rm

如果你不確定,總是先在沒(méi)有-X rm的情況下調(diào)用fd?;蛘?,使用rm的“交互式”選項(xiàng):

> fd -H '^\\.DS_Store$' -tf -X rm -i

如果你想刪除某類目錄,可以使用同樣的技術(shù)。你將不得不使用rm的--recursive/-r標(biāo)志來(lái)刪除目錄。

注意

使用fd … -X rm -r可能會(huì)引起競(jìng)態(tài)條件的情況:如果你有一個(gè)像…/foo/bar/foo/…這樣的路徑,并且想要?jiǎng)h除所有名為foo的目錄,你最終可能會(huì)遇到外層foo目錄首先被刪除的情況,導(dǎo)致(無(wú)害的)"'foo/bar/foo':沒(méi)有這樣的文件或目錄"錯(cuò)誤在rm調(diào)用中。

命令行選項(xiàng)

這是fd -h的輸出。要查看所有命令行選項(xiàng)的完整集合,請(qǐng)使用fd --help,其中也包括更詳細(xì)的幫助文本。

用法:fd [OPTIONS] [pattern] [path]...

參數(shù):

[pattern] 搜索模式(正則表達(dá)式,除非使用'--glob';可選)

[path]... 文件系統(tǒng)搜索的根目錄(可選)

選項(xiàng):

-H, --hidden 搜索隱藏的文件和目錄

-I, --no-ignore 不遵守.(git|fd)ignore文件

-s, --case-sensitive 大小寫(xiě)敏感搜索(默認(rèn):智能大小寫(xiě))

-i, --ignore-case 大小寫(xiě)不敏感搜索(默認(rèn):智能大小寫(xiě))

-g, --glob 基于通配符的搜索(默認(rèn):正則表達(dá)式)

-a, --absolute-path 顯示絕對(duì)路徑而非相對(duì)路徑

-l, --list-details 使用帶有文件元數(shù)據(jù)的長(zhǎng)列表格式

-L, --follow 跟隨符號(hào)鏈接

-p, --full-path 搜索完整的絕對(duì)路徑(默認(rèn):僅文件名)

-d, --max-depth 設(shè)置最大搜索深度(默認(rèn):無(wú)限制)

-E, --exclude 排除與給定的glob模式匹配的條目

-t, --type 按類型過(guò)濾:文件(f)、目錄(d/dir)、符號(hào)鏈接(l)、可執(zhí)行文件(x)、空(e)、套接字(s)、管道(p)、塊設(shè)備(b)、字符設(shè)備(c)

-e, --extension 按文件擴(kuò)展名過(guò)濾

-S, --size 根據(jù)文件大小限制結(jié)果

--changed-within 按文件修改時(shí)間過(guò)濾(比這新的)

--changed-before 按文件修改時(shí)間過(guò)濾(比這舊的)

-o, --owner user:group 按擁有者和/或組過(guò)濾

-x, --exec ... 對(duì)每個(gè)搜索結(jié)果執(zhí)行命令

-X, --exec-batch ... 一次性用所有搜索結(jié)果執(zhí)行命令

-c, --color 使用顏色的時(shí)候 [默認(rèn):auto] [可能的值:auto, always, never]

-h, --help 打印幫助(查看更多使用'--help')

-V, --version 打印版本

以上就是fd工具的詳細(xì)介紹,希望這個(gè)小工具能在你的日常開(kāi)發(fā)和文件管理中大顯身手!如果你有任何問(wèn)題或建議,歡迎到fd的GitHub倉(cāng)庫(kù): https://github.com/sharkdp/fd 提出。記得,保持文件系統(tǒng)的整潔,讓查找文件變得更簡(jiǎn)單!


責(zé)任編輯:華軒 來(lái)源: 科學(xué)隨想錄
相關(guān)推薦

2021-06-02 22:54:34

技巧 Git Clone項(xiàng)目

2024-03-08 07:58:13

QPShttpsync

2019-11-18 17:45:45

金蝶國(guó)際

2023-03-07 08:34:01

2025-04-24 09:31:09

Visio畫(huà)圖工具

2022-10-27 07:09:34

DjangoAPIRedis

2023-09-07 11:29:36

API開(kāi)發(fā)

2022-05-25 08:41:48

Linuxfd 命令文件

2025-03-13 11:59:00

2022-04-13 09:44:16

5G萬(wàn)兆網(wǎng)絡(luò)數(shù)字化

2021-05-06 10:52:09

Java Spring Bo框架

2018-01-29 05:38:20

5G4G運(yùn)營(yíng)商

2016-07-07 15:38:07

京東

2021-08-30 15:41:23

代碼開(kāi)源微軟

2019-03-27 13:45:44

MySQL優(yōu)化技巧數(shù)據(jù)庫(kù)

2025-03-03 13:12:33

C#代碼Python

2020-09-16 16:07:34

Chrome插件瀏覽器

2011-02-28 10:01:00

芯片有機(jī)塑料

2024-06-27 11:22:34

2009-12-15 21:49:05

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)