【问题标题】:Bash script to find && mkdir用于查找 && mkdir 的 Bash 脚本
【发布时间】:2015-06-09 19:10:52
【问题描述】:

场景

我正在为具有以下结构的数千个域在邮件服务器上切换 IMAP 客户端:

邮件文件夹位置:/home/mail/domains(只是一个例子)

domain1.com 的 Maildir 包含以下文件夹:(再次只是一个示例)

.Sent.2002.May
.Sent.2002.June
.Personal.Home.Jack

domain2.com 的 Maildir 包含

.Sent.2008.June
.Emails.Test.test2

domain3.com 的 Maildir 包含

.Sent.2012.Files
.Archive.2014.May

问题:

只要中间文件夹不存在,我的新 IMAP 客户端就会引发错误。 domain1.com 的示例:

如果.Sent.2002 文件夹不存在,当我尝试查看.Sent.2002.May 时会抛出错误

任务

我需要一个脚本来:

  1. /home/mail/domains/$domain/Maildir/ 中使用此命名模式.$1.$2.$3 查找文件夹
  2. 创建中间文件夹/home/mail/domains/$domain/.$1.$2/
  3. /home/mail/domains/$domain/.$1.$2/ 发送给用户mail

手动尝试了一个域,IMAP客户端错误消失了。

需要脚本方面的帮助。在这种情况下,我不确定如何将参数从 find 转换为 mkdir,因为文件夹名称总是不同的。

【问题讨论】:

  • 很好。祝脚本好运。你有问题吗?
  • 嗯,是的,我需要为概述的任务创建该 bash 脚本。我的问题是如何?在这种情况下,我不确定如何将参数从 find 转换为 mkdir,因为文件夹名称总是不同的。

标签: linux bash centos


【解决方案1】:

你需要这样的东西:

for i in `find  /home/mail/domains/$domain/Maildir/  -exec basename {} \; ` 
    do
    DIR=`echo $i |  awk -F. '{print "/home/mail/domains/$domain/." $2 "." $3}'` 
    mkdir $DIR
    chown mail $DIR
done

在这里执行,我得到:

mkdir /home/mail/domains/$domain/.Personal.Home
chown mail /home/mail/domains/$domain/.Personal.Home
mkdir /home/mail/domains/$domain/.Sent.2002
chown mail /home/mail/domains/$domain/.Sent.2002
mkdir /home/mail/domains/$domain/.Sent.2002
chown mail /home/mail/domains/$domain/.Sent.2002

【讨论】:

  • 正是我需要的。谢谢!