我需要执行一个bash命令来查看系统上的每个主目录,并将.forward文件的内容复制到一个文件中,同时复制它刚才复制的目录的名称。因此,例如,最终文件将类似于forwards.txt,并且侦听将是
/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
感谢。
答案 0 :(得分:1)
您的脚本有更正版本:
#!/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
答案 1 :(得分:1)
我会写
for fwd in /home/*/.forward; do
dirname "$fwd"
cat "$fwd"
done > forwards.txt
答案 2 :(得分:0)
一个班轮(已更正):
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