微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

包装bashfind命令

我想写一个简单的bash脚本来包装认的unix / linux查找程序在bash中find匹配的多个文件

这是我的程序名为my_find_command :

#!/bin/bash patt="" first=true for i in "$@"; do if [ "$first" = true ]; then patt="-name '$i'" first=false else patt="${patt} -o -name '$i'" fi done echo "$patt" find . -type f ( ${patt} ) echo 'done'

假设我有一些文件find命令将能够返回一些文件

但是,当我打电话my_find_command icon.png profile.png我什么都没有。

Linux AWK的帮助。 有一个AWK的时间

Bash匿名pipe道

在Bash中做什么<()?

有没有办法看到一个path的所有中间目录的权限..?

文件和terminal之间运行退出命令有什么区别

这里出了什么问题?

通过BASH用下划线replace空格

如何在没有填充磁盘空间的情况下在tar归档文件中的grep模式

如果使用三通,如何检查退出

运行一个命令作为后台进程/服务

bash脚本命令“陷阱”在docker容器中不起作用

字符串中的引号不会按照您希望的方式工作。 你是对的./my_find_command icon.png不会找到icon.png 。 但是,它会找到'icon.png' 。 例如:

$ ls 'icon.png' my_find_command $ ./my_find_command my_find_command icon.png -name 'my_find_command' -o -name 'icon.png' ./'icon.png' done

问题来自于尝试将多个命令参数放入一个变量中。 有关错误发生方式的完整说明,请参阅“我试图将一个命令放入一个变量中,但复杂的情况总是失败!” 。 相反,使用一个数组:

#!/bin/bash patt=() for i in "$@"; do if [ "${#patt}" -eq 0 ]; then patt=(-name "$i") else patt+=(-o -name "$i") fi done echo "${patt[@]}" find . -type f ( "${patt[@]}" ) echo 'done'

这现在打印正确的文件

$ ls 'icon.png' icon.png my_find_command $ ./my_find_command my_find_command icon.png -name my_find_command -o -name icon.png ./icon.png ./my_find_command done

为了演示通配符正确工作:

$ ls 'icon.png' icon.png my_find_command $ ./my_find_command my_find_command '*icon.png*' -name my_find_command -o -name *icon.png* ./icon.png ./my_find_command ./'icon.png' done

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐