【发布时间】:2017-04-27 22:01:52
【问题描述】:
我修改了海报从另一个板上给我的脚本,以更好地满足我的需要。 InputConfig.txt 包含在其中查找文件的目录、入站文件期限(第二列)和出站文件期限(第三列)。每个目录的这些入站/出站号码不必相同,我只是这样做了。最重要的是 VI 和 AB 目录有特定的年龄要检查,其他一切都使用通用的 30 分钟。
Perl 语句的目的是捕获找到的每个文件的时间戳。问题是 printf 加了一行,因为 while 循环正在读取 3 行,但我只需要打印 2 行(或多行)。
我不太了解 Perl,无法修复它 - 如果问题出在 Perl 上的话。
感谢您的帮助。
InputConfig.txt
/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
期望的输出
/home/MF/NA/CD/VI/inbound/vis,1492716168
/home/MF/NA/CD/AB/inbound/abc,1492716485
【问题讨论】:
-
在您的循环的第一次迭代中,
$TS似乎是空的?所以perl -e的输出是",0"...另外,当InputConfig.txt有3 行时,为什么你期望有两行输出 -
你有三行输入,你要求
perl为每一个打印一行...你只是缺少if length($ARGV[0])吗? -
@HåkonHægland 我希望有 2 行输出,因为这些是“查找”找到的文件。第一行与我无关。
-
@ikegami 我希望 Perl 仅打印找到的文件的行。我知道它会因为输入而打印 3 行,但有没有办法让它只打印 find 命令返回的内容?
-
简直不懂。这是一行中的 3x 分配
TS=$(..),因此将使用唯一的最后一个。前两个发现有什么意义?
标签: perl shell loops while-loop