包含grep的脚本中的错误

时间:2014-07-24 21:35:11

标签: shell unix

我在下面的代码中收到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这些......

1 个答案:

答案 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