我在下面的代码中收到GREP无效选项错误:
file=$(find . -mtime -4 |ls -lt)
for f in $file
do
po=$(echo $f|cut -d"_" -f2)
find . -mtime -4 |ls -lt|grep "$po"|while read fn
do
if [ -s $fn ]; then #checks if the file is not empty
if [ -d tmp ]; then
rm -r tmp
fi
mkdir tmp
cp -p $fn /tmp/$fn
break
fi
done
done
基本上我正在尝试对我从中找到的列表进行排序,然后通过它循环获取PO的最新非零文件。
文件清单是
-rw-rw-r-- 1 loneranger loneranger 37 Jul 21 06:30 belk_po12345_20140721.log
-rw-rw-r-- 1 loneranger loneranger 24 Jul 22 06:30 belk_po12345_20140722.log
-rw-rw-r-- 1 loneranger loneranger 0 Jul 23 06:30 belk_po12345_20140723.log
-rw-rw-r-- 1 loneranger loneranger 11 Jul 24 12:00 belk_po12348_20140723.log
PO-po12345或po12348这些......
答案 0 :(得分:1)
基本上我正在尝试对找到的列表进行排序 然后循环通过它获取PO的最新非零文件。
除了最终find
:
sort
find . -size '+1c' -type f -printf "%f %T@\n" | sort -k2
find
部分搜索文件(-type f
)长度超过1个字节(-size '+1c'
),每个搜索文件打印文件的基本名称(%f
)和修改时间为1970年1月1日格林威治标准时间00:00(%T@
)以来的秒数。之后,对第二个字段(时间戳)进行简单排序。
当然,您可以在find
添加所需的所有搜索条件,但这是基本想法。
如果您想循环结果,请照常执行:
find . -size '+1c' -type f -printf "%f %T@\n" |
sort -k2 |
while read fname mts; do
# ...
done