You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中使用单行命令导航到最新修改的动态生成文件夹

错误原因分析

你之前的拼接命令报错,核心原因是命令替换$()的执行时机是在cd命令运行前,统一在你执行命令的当前工作目录下运行的,第二个ls -1dt ./*/ | head -n 1并没有在你拼接出来的一级动态目录/ApplicationPackage下执行,自然找不到对应的业务目录。


正确单行实现方案

方案1:完全复用原有逻辑的写法(推荐,无适配成本)

把你原来的多步逻辑用&&串联,执行顺序和原有逻辑完全一致,天然兼容带空格的动态目录名:

RLM_BASE_PATH=/opt/tableau/tableau_rlm/deployment && cd "$RLM_BASE_PATH" && cd "$(\ls -1dt ./*/ | head -n 1)" && cd ApplicationPackage && cd "$(\ls -1dt ./*/ | head -n 1)" && RLM_REPORTING_PATH="$(pwd)" && echo "$RLM_REPORTING_PATH" && chmod -R 777 "$RLM_REPORTING_PATH"/*

如果不需要后续的赋权操作,只需要导航到目标目录,删掉&& RLM_REPORTING_PATH及之后的内容即可。

方案2:纯路径拼接写法

不需要切换工作目录,直接拼接出完整目标路径:

cd "$(d1=$(ls -1dt /opt/tableau/tableau_rlm/deployment/*/ | head -n1); d2=$(ls -1dt "${d1}ApplicationPackage"/*/ | head -n1); echo "$d2")"

如果需要同时执行赋权操作,在后面追加&& RLM_REPORTING_PATH=$(pwd) && echo $RLM_REPORTING_PATH && chmod -R 777 $RLM_REPORTING_PATH/*即可。


补充优化建议

如果你的目录名可能包含换行、特殊符号,更稳定的目录查找逻辑可以把ls -1dt ./*/ | head -n 1替换为基于find的时间排序实现,避免解析ls输出的兼容性问题:

find . -maxdepth 1 -type d -printf "%T@ %p\n" | sort -nr | head -1 | cut -d' ' -f2-

内容的提问来源于stack exchange,提问作者Farid Arshad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:54:07