linux - Centos shell 脚本 - 对以相同字符串开头的文件进行分组

标签 linux bash shell awk ls

我有一个包含许多 pdf 文件的目录。每个文件名都以数字 ID(5 个字符固定长度)开头,如下所示:

11111-2014.pdf  
11111-2015.pdf  
22222-2015.pdf  
33333-2013.pdf  
33333-2014.pdf  
33333-2015.pdf  

我试图弄清楚如何在 CentOS 中编写一个 shell 脚本来读取此类目录中的文件并根据 ID 列出它们。 shell 脚本应返回以下输出(共 3 行),如下所示:

11111-2014.pdf 11111-2015.pdf  
22222-2015.pdf  
33333-2013.pdf 33333-2014.pdf 33333-2015.pdf  

并为每一行分配一个变量名称(即:$rowstring)。

我想将所有以相同 ID 开头的文件分组到一个字符串中,并通过命令行使用 mutt 电子邮件客户端将它们附加到同一封电子邮件中。因此,按照上面的示例:

对于每个唯一的 $rowstring,命令为:

mutt -s "subject" $rowstring -- abc@domain.com < body.txt  

其中 $rowstring(附件)应如下所示
对于第一封电子邮件:

-a 11111-2014.pdf -a 11111-2015.pdf

对于第二封电子邮件:

-a 22222-2014.pdf  

对于第三封电子邮件:

-a 33333-2013.pdf -a 33333-2014.pdf -a 33333-2015.pdf

我尝试结合 ls 和 awk 命令,但我太新手了,无法成功。 谢谢大家。

最佳答案

以下命令:

 ls  | awk -F '-' 'BEGIN{temp=""} temp&&$1!=temp{printf "\n"} {printf "-a %s ",$0; temp = $1}'

输出:

-a 11111-2014.pdf -a 11111-2015.pdf
-a 22222-2015.pdf
-a 33333-2013.pdf -a 33333-2014.pdf -a 33333-2015.pdf

然后,您可以一次使用每一行并发送邮件。

关于linux - Centos shell 脚本 - 对以相同字符串开头的文件进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32041881/

相关文章:

bash - 查找包含给定文件的目录?

mysql 外部 shell 命令从 IP 地址获取 GeoIP 信息

linux - 在 Fedora 15 上安装 nautilus RPM 时出现 PKG_CONFIG_PATH 错误

linux - NETLINK_FIREWALL 和 NETLINK_NETFILTER 之间有什么区别?

Linux脚本telnet HEAD请求

bash - 在虚拟机中运行脚本,但从虚拟机外部调用

linux - 如何编写任意长的管道链?

c 编程 - 来自 DIR* 结构的目录名

linux - `sed: -e expression #1, char 1: unknown command: ` , '`

bash - 是否可以在一次操作中应用两个匹配模式转换?