我需要执行一个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