我正在尝试创建一个脚本,它将连接目录out.*
中的所有/home/rfranklin/stackDump/
文件,然后将该连接文件传递给mailx命令 - 所以我可以将它邮寄给自己
到目前为止,我尝试了两种方法,但它们似乎都没有工作。希望有人能告诉我原因!
目前在/home/rfranklin/stackDump/
目录中我有文件:
out.file1
out.file2
out.file3
out.file4
otherfile.txt
otherfile2.txt
首先,我尝试编写for循环:
#!/bin/bash
#
OUT_FILES_DIRECTORY="/home/rfranklin/stackDump/out.*"
for file in $OUT_FILES_DIRECTORY
do
cat $file > stack_dump_`date +%Y%m%d` | mailx -s stack_dump_`date +%Y%m%d` rfranklin@gmail.com
done
返回:
Null message body; hope that's ok
Null message body; hope that's ok
Null message body; hope that's ok
Null message body; hope that's ok
我收到4封空白电子邮件。但是创建了连接文件,所以我知道有些工作正在进行中。
接下来我尝试使用这里的文档:
#!/bin/bash
#
bash <<'EOF'
cd /home/rfranklin/stackDump
cat out.* > stack_dump_`date +%Y%m%d` | mailx -s stack_dump_`date +%Y%m%d` rfranklin@gmail.com
done
EOF
这对我也不起作用。我哪里错了!
由于
答案 0 :(得分:1)
您可以使用tee
:
#!/bin/bash
d=$(date +%Y%m%d)
for file in /home/rfranklin/stackDump/out.*
do
cat "$file" | tee -a "stack_dump_$d" | mailx -s "stack_dump_$d" rfranklin@gmail.com
done
tee
将标准输入复制到文件以及标准输出。 -a
选项附加到文件而不是覆盖它。
在原始版本的脚本中,>
将cat
的输出重定向到文件,这意味着mailx
的管道为空。
我假设你的脚本不会运行超过一天,所以我已经将调用移到了date
循环之外。
答案 1 :(得分:1)
我没有看到在这里创建文件的重点,您可以轻松地将cat
的输出管道传输到mailx
cat /home/rfranklin/stackDump/out.* |
mailx -s "stack_dump_$(date +%Y%m%d)" rfranklin@gmail.com
如果您更喜欢邮件正文中的内容附件
cat /home/rfranklin/stackDump/out.* |
uuencode "stack_dump_$(date +%Y%m%d)" |
mailx -s "stack_dump_$(date +%Y%m%d)" rfranklin@gmail.com
答案 2 :(得分:0)
据我所知,您希望将给定目录中的所有文件连接到一个文件中,然后将其邮寄给您自己。如果我错了,请纠正我。
首先将所有文件连接成一个:
cat /home/rfranklin/stackDump/out.* > concatFile
然后邮寄给自己:
dat=$(date +%Y%m%d)
mail -s "stack_dump_$dat" rfranklin@gmail.com < concatFile
修改强>
你可以把它放在一个脚本中:
dir=$1
cat $dir/out.* > concatFile
dat=$(date +%Y%m%d)
mail -s "stack_dump_$dat" rfranklin@gmail.com < concatFile
按原样运行:
./script /home/rfranklin/stackDump
将在您当前的目录中创建concatFile
。