#! /bin/bash
while :
do
filenames=$(ls -rt *.log | tail -n 2)
echo $filenames
cat $filenames > jive_log.txt
sleep 0.1
done
我正在尝试从目录中读取最新的2个文件,并使用bash加入它们。
但是,如果当前目录中没有带扩展名.log的文件,则ls -rt *.log
命令将失败并显示error "ls: cannot access *.log: No such file or directory"
。错误之后,看起来while循环不会执行。
之后我是这样做的,即使一个命令失败,无限循环也会继续。
答案 0 :(得分:1)
我不确定你的意思,但也许:
for (( ;; )); do
while IFS= read -r FILE; do
cat "$FILE"
done < <(exec ls -rt1 *.log | tail -n 2) >> jive_log.txt
sleep 1
done
请注意ls
选项-1
逐行打印文件。
无论如何,您可以将最后两个文件加入jive_log.txt:
while IFS= read -r FILE; do
cat "$FILE"
done < <(exec ls -rt1 *.log | tail -n 2) >> jive_log.txt
另一种方法是将其保存到数组(例如使用readarray
),然后将最后2个元素传递给cat。
readarray -t FILES < <(exec ls -rt1 *.log)
cat "${FILES[@]:(-2)}" > jive_log.txt ## Or perhaps you mean to append it? (>>)
答案 1 :(得分:1)
如果要对find
的输出进行排序,则必须在开头添加排序键,稍后可以将其删除。
find . -name \*.log -printf '%T+\t%p\n' |
sort -r |
head -2 |
cut -f 2-
使用head
代替tail
会稍微便宜一些。