有没有办法覆盖Unix终端find命令?

有没有办法覆盖Unix终端find命令?,unix,terminal,find,command,Unix,Terminal,Find,Command,例如:Find命令搜索txt文件 find . -iname "*.txt" 我想在.bash\u profile中创建find命令的别名,以便在查找.bash\u profile时,我应该能够传递任何参数以查找命令以搜索文件类型: find txt find pdf find doc 我尝试使用以下语法覆盖find命令,如下所示: find ./ -iname "$1" 其中$1可以是任何参数文件类型。为什么不编写bash脚本 #!/bin/sh for var in "$@";

例如:Find命令搜索txt文件

find . -iname "*.txt" 
我想在
.bash\u profile
中创建
find
命令的别名,以便在查找
.bash\u profile
时,我应该能够传递任何参数以查找命令以搜索文件类型:

find txt find pdf find doc  
我尝试使用以下语法覆盖find命令,如下所示:

find ./ -iname "$1"

其中$1可以是任何参数文件类型。

为什么不编写bash脚本

#!/bin/sh

for var in "$@"; do
    find . -iname "*.$var"
done
您可以将其存储在文件中,使其可执行(
chmod+xfindbytype
),然后将其复制到PATH变量内的目录中。执行与调用一样简单:

[user@localhost ~]$ find-by-type pdf txt doc

在主目录中打开
.bashrc
文件(通常是隐藏的,按Ctrl+H键查看),然后追加此行

alias finder="find . -type f -regex "
注意:我使用
-regex
,这将帮助您匹配文件扩展名模式

然后在shell中执行:

source .bashrc
然后,使用您的文件名/扩展名调用名为
finder
的别名

例如:

finder '*\(txt\|py\|pdf\|lst\)'

谢谢你的建议。我尝试了类似于在
中编写函数的方法。bash\u profile

findFile(){
    find $1 -iname "*.$2"
}
源代码
.bash\u配置文件

export -f findFile

findFile ~/Desktop txt

需要注意的一点是:这将匹配名为“CntxtSnstv.png”的文件。你需要在结尾没有第二个星号的情况下调用它!我建议用一个新名字。别名不能很好地处理位置参数;使用函数。您的符号
find txt find pdf find doc
是奇数;这是指3个单独的命令还是1个复合命令?(在编辑之前,它们都在一行上,所以我将它们放在一行上,但看起来更可能是您打算使用3个单独的命令。)我更喜欢独立脚本,而不是别名(特别是)或函数。在某些情况下,可以使用替代方法,但使用
find
命令不会影响速度,而且单独脚本的清洁度也是一个好主意。您可以考虑使用以下方法:
command=(find.-iname“*.$1”);转移;选择加入“$@”;do命令+=(-o-iname“*.$opt”);完成;“${command[@]}”
它构建了一个
find
命令,以便在执行
find
时运行所有搜索。这比运行多个
find
命令更经济(尤其是在大树上)。您可以在最后一个命令前面加上
exec
,以获得边际(不可测量)增益。缺点是文件类型会在输出中交错,而不是按文件后缀分隔。好主意,@JonathanLeffler。此外,您还可以按文件夹/名称而不是按类型/文件夹/名称对文件进行重新排序。请注意,如果目录名包含空格(等),您可能也应该将
$1
用双引号括起来。