每个人都说bad, bad, very bad to use ls可以解析。这是一个将选择日志文件的脚本。我不想遍历整个目录,$ 1是我要查看的文件名,而在那些文件中,我只想查看最后两个。不使用ls怎么办?
for i in $(ls -ltr ~/logs/autosys/*${1}* | tail -2) ; do
if [[ ${i} =~ ".out" ]] ; then
tailpath=$(echo ${i%.*} | awk '{print $9}')
fi
done
答案 0 :(得分:1)
如果不使用ls
,则将无条件遍历文件,在每个文件上调用stat
,并自己跟踪两个最新文件。
t0=0
t1=0
for i in ~/logs/autosys/*"${1}"*; do
# Assuming GNU stat; syntax for other implementations may vary
t=$(stat -c "%Y" "$i")
if (( t > t0 )); then
f1=$f0
f0=$i
t1=$t0
t0=$t
elif (( t > t1 )); then
t1=$t
f1=$i
fi
done
现在$f0
和$f1
包含两个最新文件的名称。
事实是,bash
并不适合轻松高效地完成此任务。 (bash
发行版的确包含内置的stat
命令,但似乎并不普遍安装。)
zsh
使此任务相当容易:
% files=(~/logs/autosys/*${1}*(Om[-2,-1]))
全局限定符Om
和[-2,-1]
按修改日期排序,并将匹配项分别限制为最后两个元素。 ((om[1,2])
也可以。)
答案 1 :(得分:1)
我怀疑你想要
selinput.select2({