[英]Bash script to scan sub-directories and copy contents of file to another file
我需要执行一个bash命令,该命令将浏览系统上的每个主目录,并将.forward文件的内容复制到一个文件中,并复制刚从中复制的目录的名称。 因此,例如,最终文件将是诸如forwards.txt之类的内容,listeings将是
/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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.