bash脚本以扫描子目录并将文件内容复制到另一个文件



我需要执行一个bash命令,该命令可以浏览系统上的每个主目录,并将.forward文件的内容复制到单个文件,并复制该名称目录是从中复制的。例如

/home/user1
user1@email.com
/home/user2
user2@email.com

我已经用它列出了它们进行屏幕。

find /home -name '*' | cat /home/*/.forward

它将在每个文件中打印出向前的,但我没有将其列出来前缀它来自哪个主目录。我需要使用循环来做到这一点吗?我有这个测试循环,

#!/bin/bash
for i in /home/*
        do
                if [ -d $i ]
                        then
                                pwd >> /tmp/forwards.txt
                                cat /home/*/.forward >> /tmp/forwards.txt
                fi
        done

,但它通过我的测试设置和forwards.txt文件的四个主目录进行了以下列出的四次。

/tmp
user1@email.com
user2@email.com
user3@email.com
user3@email.com

谢谢。

您的脚本有更正的版本:

#!/bin/bash
for i in /home/*
        do
                if [ -f "$i/.forward" ]
                then
                                echo "$i" >> /tmp/forwards.txt
                                cat "$i/.forward" >> /tmp/forwards.txt
                fi
        done

一些要点:

  • 我们在主目录中检查了.forward文件的礼物,而不是主目录本身的存在

  • 在每次迭代中,$i都包含主目录的名称(例如/home/user1)。因此,我们使用其值代替pwd命令的输出,该命令始终返回当前目录(在我们的情况下不会改变)

  • 而不是/home/*/.forward我们使用"/home/$i/.forward",因为替换后的*给我们所有目录,而我们仅需要电流


此脚本的另一个最短版本可能是这样的:

find /home -type f -name '.forward' | while read F; do
    dirname "$F" >>/tmp/forwards.txt
    cat "$F" >>/tmp/forwards.txt
done

我会写

for fwd in /home/*/.forward; do
    dirname "$fwd"
    cat "$fwd"
done > forwards.txt

一个衬里(更正):

find /home -maxdepth 2 -name ".forward" -exec echo "{}" >> /tmp/forwards.txt ; -exec cat "{}" >> /tmp/forwards.txt ;

这将输出:

/home/user1/.forward
a@a.a
b@b.b
/home/user2/.forward
a@b.c

相关内容

最新更新