Bash脚本找到&& MKDIR

时间:2015-06-09 19:10:52

标签: linux bash centos

方案

我正在邮件服务器上切换数千个域的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/
  2. .$1.$2.$3中查找文件夹
  3. 创建中间文件夹/home/mail/domains/$domain/.$1.$2/
  4. Chown /home/mail/domains/$domain/.$1.$2/至用户mail
  5. 手动为一个域尝试,IMAP客户端错误消失了。

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

1 个答案:

答案 0 :(得分:2)

您需要以下内容:

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