我修改了一张海报从另一块板上给我的脚本,以更好地满足我的需求。 InputConfig.txt包含用于查找文件的目录,入站文件年龄(第二列)和出站文件年龄(第三列)。每个目录的这些入站/出站号码不必相同,我只是这样做了。最重要的是VI和AB目录有特定的年龄要检查,其他一切都使用通用的30分钟。
Perl语句的目的是捕获找到的每个文件的时间戳。问题是<html>
<h:body>
#{label.value}
</h:body>
</html>
增加了一条线,因为while循环读取3行,但我只需要2行(或多行)来打印。
我不太了解Perl,如果问题出在Perl上,就不能解决它。
感谢帮助。
InputConfig.txt
printf
脚本
/home/MF/NA/CD 30 30
/home/MF/NA/CD/VI 10 10
/home/MF/NA/CD/AB 15 15
输出:
#!/bin/ksh
VI=*/CD/VI/*
AB=*/CD/AB/*
cat InputConfig.txt | while read DIR IT OT; do
TS=$(find "${DIR}" -type f -path "${DIR}/*/inbound/*" -mmin "+${IT}" ! -path "${VI}" ! -path "${AB}")
TS=$(find "${DIR}" -type f -path "${DIR}/*/outbound/*.done" -mmin "+${OT}")
TS=$(find "${DIR}" -type f -path "${DIR}/inbound/*" -mmin +"${IT}")
perl -e 'printf("%s,%d\n", $ARGV[0], (stat("$ARGV[0]"))[9]);' "$TS"
done
期望输出
,0
/home/MF/NA/CD/VI/inbound/vis,1492716168
/home/MF/NA/CD/AB/inbound/abc,1492716485
答案 0 :(得分:3)
脚本有很多问题:
TS
变量分配3x行,因此,只会使用最后一个变量。 find
的前两次运行是没有意义的 - 所以你可能想要实现别的东西。mtime
获取perl
。如果您将从stdin
读取文件名而不是开始perl X次,这是一个很酷的主意。在这种情况下,使用stat
shell命令会更快 - 换句话说,您希望从stdin
读取文件名。read -r
(除非您知道为什么不想要-r
):))cat
。只需重定向文件中的整个循环输入因此,脚本可能看起来像:
#!/bin/ksh
VI=*/CD/VI/*
AB=*/CD/AB/*
while read -r DIR IT OT; do
find "${DIR}" -type f -path "${DIR}/*/inbound/*" -mmin "+${IT}" ! -path "${VI}" ! -path "${AB}" -print
find "${DIR}" -type f -path "${DIR}/*/outbound/*.done" -mmin "+${OT}" -print
find "${DIR}" -type f -path "${DIR}/inbound/*" -mmin +"${IT}" -print
done < InputConfig.txt | perl -lne 'printf "%s,%d\n", $_, (stat($_))[9];'
这是ksh
和/或shell
问题perl
。 :)
答案 1 :(得分:0)
如果我已经很好理解,你想使用perl来显示以前的find命令找到的文件的名称和大小。这样的事情应该有效:
#!/bin/ksh
VI=*/CD/VI/*
AB=*/CD/AB/*
cat InputConfig.txt | while read DIR IT OT; do
(find "${DIR}" -type f -path "${DIR}/*/inbound/*" -mmin "+${IT}" ! -path "${VI}" ! -path "${AB}" ;
find "${DIR}" -type f -path "${DIR}/*/outbound/*.done" -mmin "+${OT}" ;
find "${DIR}" -type f -path "${DIR}/inbound/*" -mmin +"${IT}") |
xargs -l perl -e 'printf("%s,%d\n", $ARGV[0], (stat("$ARGV[0]"))[9]);'
done
答案 2 :(得分:0)
感谢大家的意见,但我回到原来的if-else
脚本方法,因为我调用脚本的TIBCO项目并不喜欢输出格式。
我的脚本,调用类似于./CDFindFiles /home/NA/CD/
:
#!/bin/ksh
FOLDER=$1
VI=*/CD/VI/inbound
AB=*/CD/AB/inbound
find "$FOLDER" -type f -path "${FOLDER}*/inbound/*" -o -path "${FOLDER}*/outbound/*.done" | while read line;
do
MODTIME=$(perl -e 'printf "%d\n",(-M shift)*24*60' "$line")
if [[ "$line" == *"$VI"* && "$MODTIME" -gt 90 || "$line" == *"$AB"* && "$MODTIME" -gt 180 ]]; then
perl -e 'printf("%s,%d\n", $ARGV[0], (stat("$ARGV[0]"))[9]);' "$line"
elif [[ "$line" != *"$VI"* && "$line" != *"$AB"* && "$MODTIME" -gt 30 ]]; then
perl -e 'printf("%s,%d\n", $ARGV[0], (stat("$ARGV[0]"))[9]);' "$line"
fi
done