避免在变量内部使用ls的更好方法

时间:2017-09-20 10:01:27

标签: linux bash shell variables ls

不确定如何正确标题,如果您愿意,请更改

鉴于我的代码确实有效,我希望进行同行评审以提高其质量。

我有一个充满.zip文件的文件夹。 Theese文件是每日卸载的数据流(可通过其流名称识别)。每个流可能有多个每日文件,因此我需要按时间顺序抓取最后一个文件。我不能依赖于posix时间戳,因此文件会在其名称上显示时间戳。

文件名示例: XX_XXYYZZ_XYZ_05_AB00C901_T001_20170808210052_20170808210631.zip

  • 最后两个字段是时间戳,我对倒数第二感兴趣。
  • 其他字段无用(现在)

我之前已将流名称(在本例中为XYZ_05_AB00C901_T001)存储在变量$stream

我有这行代码:

match=$(ls "$streamPath"/*.zip|grep "$stream"|rev|cut -d'_' -f2|rev|sort|tail -1)

它的作用是在给定路径中搜索与流匹配的文件,删除时间戳并对其进行排序。现在,我知道此流的最后一个时间戳是什么,我可以再次ls,这次是为了$stream$match to togher,我完成了:

streamFile=$(ls "$streamPath"/.zip|grep "$stream.*$match\|$match.*$stream")

提问时间:

  • 有没有更好的方法来实现我的目标?可能不止一个,我更喜欢单线解决方案,很难。

  • ShellChecks告诉我最好使用for循环或while循环代替ls,以便能够处理特定的文件名(我和# 39; m不面向ATM,但谁知道呢),但我对它不太确定(对我来说似乎更复杂)。

感谢。

0

1 个答案:

答案 0 :(得分:-1)

感谢Cyrus建议的页面,我选择了这个解决方案:

main.jsp ........ ....... <div> // here i want to show another jsp after data get from sever child.jsp </div> ....... .........

谢谢!