有没有办法覆盖Unix终端find命令?
例如:Find命令搜索txt文件有没有办法覆盖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 . -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
用双引号括起来。