Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用shell脚本编辑多个目录中的某些文件_Bash_Shell - Fatal编程技术网

Bash 使用shell脚本编辑多个目录中的某些文件

Bash 使用shell脚本编辑多个目录中的某些文件,bash,shell,Bash,Shell,我维护多个邮件服务器,每个用户文件夹中都有明文配置文件,其层次结构如下: domain.com ->user1 ->user2 anotherdomain.com ->user3 ->user4 每个用户的文件夹中都有一个需要编辑的文件。每个文件都需要将第一部分更改为以下内容: #!0 __WebmailJunk__ #if allof (spamtest, not address :all :is "From" "") { # fileinto "Junk E-ma

我维护多个邮件服务器,每个用户文件夹中都有明文配置文件,其层次结构如下:

domain.com
->user1
->user2
anotherdomain.com
->user3
->user4
每个用户的文件夹中都有一个需要编辑的文件。每个文件都需要将第一部分更改为以下内容:

#!0 __WebmailJunk__
#if allof (spamtest, not address :all :is "From" "") {
#  fileinto "Junk E-mail";
#  stop;
#}
更改自:

#!1 __WebmailJunk__
if spamtest {
fileinto "Junk E-mail";
stop;
}
这是假设文件尚未更改

我想我已经用以下代码一个接一个地编辑了文件:

while read line 
do
    CHARACTER=`echo $line | cut -c 1`
    if [[ $CHARACTER == "}" ]] ;
        then
            exit 0
    fi
    sed -i -e 's/^/#/' <filename>
done
读取行时
做
CHARACTER=`echo$line | cut-c1`
如果[[$CHARACTER==“}”];
然后
出口0
fi
sed-i-e's/^/#/'
完成

还没有弄清楚如何解析每个用户目录,只有一个文件夹可以编辑文件。有问题的服务器正在运行CentOS 6.4。

能否使用“查找”匹配用户文件? e、 g


其中
script\u不替换文本。sh
是您上面编写的代码。

在哪里有父目录列表?它们是否只包含那些userX类型的文件?我将从列出邮件服务器上托管的域的目录中运行脚本,每个文件夹中都有每个用户。有问题的文件(filter.siv)位于用户文件夹中。示例路径:domainname.com/bob.smith/filter.sivfind-maxdepth 3-名称“filter.siv”-exec script.sh{}\;用于查找文件并运行脚本。现在只需要让脚本工作。{\}是执行命令时放置
find
结果的地方。i、 e.如果
find
将找到的第一个文件是“test/f1.txt”,则该命令将是
script\u,该脚本不执行\u text\u replace.sh test/f1.txt
find ./ -maxdepth 1 -name "user*" -exec script_that_does_text_replace.sh {\} \;