Bash 使用特定字符串查找路径中的可执行文件
有没有办法快速知道myBash 使用特定字符串查找路径中的可执行文件,bash,shell,Bash,Shell,有没有办法快速知道my$PATH中的可执行文件是否包含特定字符串?例如,我想快速列出包含SRA的可执行文件 我问这个问题的原因是我有几个脚本,其中包含字符SRA。问题是我总是忘记文件的起始字符(如果我记得的话,我使用制表符补全来查找它)。例如: find ${PATH//:/ } -maxdepth 1 -executable -name '*SRA*' 如果在$PATH中碰巧有空格(或其他危险字符)(有点笨拙: find $(echo $PATH | tr : ' ') -name \*SR
$PATH
中的可执行文件是否包含特定字符串?例如,我想快速列出包含SRA
的可执行文件
我问这个问题的原因是我有几个脚本,其中包含字符SRA
。问题是我总是忘记文件的起始字符(如果我记得的话,我使用制表符补全来查找它)。例如:
find ${PATH//:/ } -maxdepth 1 -executable -name '*SRA*'
如果在$PATH中碰巧有空格(或其他危险字符)(有点笨拙:
find $(echo $PATH | tr : ' ') -name \*SRA\*
您可以将所有路径存储在一个数组中,然后使用find
及其各种选项:
IFS=":" read -ra paths <<< "$PATH"
find "${paths[@]}" -type f -executable -name '*SRA*'
我在这一页上为OSX编写了一个bash脚本
我认为它也适用于其他操作系统。请注意,它也会忽略错误,对结果进行排序,并且只显示唯一的值
可执行文件\u在\u路径\u匹配\u substring.sh中
!/usr/bin/env bash
函数show_help()
{
ME=$(基本名称“$0”)
IT=$(为什么要循环?为什么不只查找“${paths[@]}”-键入f…
?很高兴能够为您的答案之一做出贡献。:)啊,没错,-print
是默认值,如果没有-ls
或-exec
。不过,作为参考,FreeBSD或OSX中的查找
不包括-executable
选项,这是GNU findutils选项。我相信您可以使用-perm+u=x,g=x,o=x
获得相同的结果。他还提出了另一个可能的更改re是忽略查找中的错误(因为路径中的某些路径可能无效),并删除重复项(因为某些路径可能多次出现在路径中),因此find“${paths[@]}”-键入f-executable-name*SRA*'2>/dev/null | sort | uniq
和另外一个,听起来像是posix便携式版本的-executable
,就是使用-perm+111
,这是我可以在mac上使用的唯一变体,同样的缺点是绕过包含空格的路径目录…一个使用IF的解决方案S=:
更安全。
IFS=":" read -ra paths <<< "$PATH"
find "${paths[@]}" -type f -executable -name '*SRA*'
find -perm -o=x,-g=x,-u=x
#!/usr/bin/env bash
function show_help()
{
ME=$(basename "$0")
IT=$(cat <<EOF
returns a list of files in the path that match a substring
usage: $ME SUBSTRING
e.g.
# Find all files in the path that have "git" in their name
$ME git
EOF
)
echo "$IT"
echo
exit
}
if [ -z "$1" ]
then
show_help
fi
if [ "$1" == "help" ] || [ "$1" == '?' ] || [ "$1" == "--help" ] || [ "$1" == "h" ]; then
show_help
fi
SUBSTRING="$1"
IFS=":" read -ra paths <<< "$PATH"
find "${paths[@]}" -type f -perm +111 -name "*$SUBSTRING*" 2>/dev/null | sort | uniq