java - Unix shell:如何确保命令适用于最常见的 shell?
问题描述
我有一些使用 jsch 连接到我们的 unix 服务器并在命令下运行的 java 代码。
ls -lt /tempdirectory/ grep -v '^do | grep "$"(date '+%b %e')" | head -1 | awk '{print %9}'
上面的命令以长格式显示 /temp 目录中的所有文件(第一个管道删除目录)。然后从结果中筛选出今天创建的所有文件(即,它为“Oct 16”提供 greps)。因为我做了 ls -lt 文件是按时间排序的,所以当我对 head -1 进行管道时,我今天会得到最新的文件。然后最后一个管道将打印出文件名
在普通的腻子终端上,一旦我切换到 bash shell 并运行上面的命令,它将正确打印出今天的最新文件。
但是默认的 shell 似乎是 Bourne (-sh),上面的命令会失败(因此我的代码会失败)
有没有办法创建对普通 shell 安全的上述命令?我认为我在工作中看到的主要外壳是:
伯恩(sh)再次伯恩(bash)科恩(ksh)
解决方案
这是您应该使用该find(1)
命令的地方:
$ find /tmpdir -type f -ctime -1
/tmpdir
从今天创建的(ctime)获取所有文件。
如果您想要所有文件,那么您不需要更多的修饰符。如果您想进一步限制,请参阅位于https://linux.die.net/man/1/find的 GNU Find 手册页。
该find(1)
命令与您可以访问远程计算机上的哪个 shell 无关。
推荐阅读
- python - 如何使用 Selenium 选择下拉菜单?
- kotlin - 添加额外支架时,Android RecyclerView 滚动无法正常工作
- java - 为什么相对路径不断变化以及如何防止它?
- flutter - dart:tml 和 dart:js not found 错误颤动
- facebook-messenger-bot - 如何使用 botbuilder Cards 进行 account_linking
- git - 在 Azure 管道中自动合并 GIT 分支
- java - 如何解决 java.lang.NumberFormatException:空字符串
- arrays - 如何从数组 eloquent laravel 中获取权限名称值
- image - 将图像保存并加载到 /data/user 中
- python - 具有不同 GPU 速度的 PyTorch DistributedDataParallel 是否同步权重?