XUbuntu22.04之自定义fd+rg极速命令组合(二百二十二)

时间:2024-03-19 17:53:08

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】????
优质专栏:多媒体系统工程师系列原创干货持续更新中……】????

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:在使用fd和rg命令过程中,发现他们组合起来使用还是太繁琐了,他们这么强,自定义fd+rg极速命令组合,使用起来效率更高。

2. Linux fd和rg命令介绍

  • Linux 系统中有许多命令行工具可以帮助用户高效地管理和使用文件描述符(file descriptor,简称 fd)。在 Linux 中,每个打开的文件或套接字都有一个唯一的文件描述符,它是一个非负整数。文件描述符通常用于系统调用,例如 read、write 和 close。在用户空间,可以使用标准 I/O 函数(如 fopen、fdopen、socket 等)获取文件描述符。
  • fd 命令是一个用于探索和管理文件描述符的工具。它可以用来查看当前进程的所有文件描述符、查找特定文件描述符的信息、监视文件描述符的变化等。fd 命令的主要用途是提高系统管理员和开发人员在处理文件描述符方面的效率。
  • 下面是一些常用的 fd 命令选项:
  • fd list:列出当前进程的所有文件描述符。
  • fd show:显示有关指定文件描述符的信息。
  • fd add:为当前进程创建一个新的文件描述符。
  • fd rm:删除指定的文件描述符。
  • fd watch:监视文件描述符的变化。
    rg 命令是 “ripgrep” 的简称,是一个快速的文本搜索工具。与 grep 相比,rg 不仅具有更高的搜索速度,还支持正则表达式、多线程以及更多的实用功能。rg 命令在许多情况下都可以替代 grep,尤其是在需要搜索大量文件或需要使用正则表达式时。
    下面是一些常用的 rg 命令选项:
  • rg search:搜索指定模式。
  • rg --files:只输出包含匹配文本的文件名。
  • rg --hidden:搜索隐藏文件。
  • rg --glob '!.git/*':忽略 Git 仓库中的文件。
  • rg --threads:使用多线程搜索以提高搜索速度。
  • rg --vimgrep:使用 Vim 的语法进行搜索。
  • rg --ignore-case:忽略大小写。
    使用示例:
  1. 搜索当前目录下包含 “linux” 的所有文件:
rg linux
  1. 搜索当前目录下隐藏的文件中包含 “linux” 的文件:
rg linux --hidden
  1. 搜索除了 Git 仓库以外的所有文件中包含 “linux” 的文件:
rg linux --glob '!.git/*'
  1. 搜索当前目录下包含 “linux” 的所有文件,并使用多线程以提高搜索速度:
rg linux --threads

总之,fd 命令和 rg 命令都是 Linux 系统中非常实用的工具,它们可以帮助用户更好地管理和使用文件描述符以及进行高效文本搜索。掌握这两个命令,将使你在使用 Linux 系统时更加得心应手。

3.fd+rg组合方案

v1.0版本

emacs fd_rg_v1.0.sh

#!/bin/bash
# v1.0
# 检查参数数量是否至少为2
if [ "$#" -lt 2 ]; then
    echo "Usage: $0 Input your [dir] and [keyword]."
    exit 1
fi


# 定义参数变量
PATTERN="$2"
SEARCH_KEYWORD="$3"

# 检查是否有提供第二个参数(路径)
if [ "$#" -eq 3 ]; then
    SEARCH_PATH="$1"
else
    SEARCH_PATH="."
fi

echo "S1 = " $1 
echo "S2 = " $2
echo "S3 = " $3

fd -H -g "$PATTERN" "$SEARCH_PATH" | xargs rg -. "$SEARCH_KEYWORD"

v2.0版本

emacs fd_rg_v2.0.sh

# v2.0
# 检查参数数量是否至少为3
if [ "$#" -lt 3 ]; then
    echo "Usage: $0 Input your [dir], [*.file], [keyword]."
    exit 1
fi

# 定义参数变量
SARCH_DIR="$1"
SEARCH_FILE="$2"
SEARCH_KEYWORD="$3"

# echo "S1 = " $1 
# echo "S2 = " $2
# echo "S3 = " $3

fd -H -g "$SEARCH_FILE" "$SARCH_DIR" | xargs rg -. "$SEARCH_KEYWORD"

v3.0版本

emacs fd_rg_v3.0.sh

# v3.0
# 检查参数数量是否至少为3(第一:目录, 第二:文件; 第三:字符串)
if [ "$#" -lt 2 ]; then
    echo "Usage: $0 Input your [dir(option)], [*.file], [keyword]."
    exit 1
fi

# 定义参数变量
SARCH_DIR=$1
SEARCH_FILE=$2
SEARCH_KEYWORD=$3

if [ $# -eq 2 ]; then  
    fd -H -g "$1" -g "$(pwd)" | xargs rg -. "$2"
elif [ $# -eq 3 ]; then  
    fd -H -g "$SEARCH_FILE" -g "$SARCH_DIR" | xargs rg -. "$SEARCH_KEYWORD"
fi

#echo "S1 = " $1 
#echo "S2 = " $2
#echo "S3 = " $3
#echo "pwd =" $(pwd)