【问题标题】:Navigate to the latest modified path/folder in bash导航到 bash 中最新修改的路径/文件夹
【发布时间】:2022-01-08 17:16:17
【问题描述】:

我正在尝试在 bash 中执行“cd”命令以导航到创建的最新文件夹。我目前实施的方法太啰嗦了。我想知道我是否能够只用一行代码来实现这一点。

如果创建新文件夹,“4122536”将动态更改。
“RLM Reporting File Sample”文件夹也将被动态创建。

例如
目标目录路径:/opt/tableau/tableau_rlm/deployment/4122536/ApplicationPackage/RLM Reporting File Sample/

我为在 bash 中到达目标路径而实施的当前方法

RLM_BASE_PATH=/opt/tableau/tableau_rlm/deployment

## Navigate to the latest folder
cd $RLM_BASE_PATH

## This will navigate to 4122536 folder
cd "$(\ls -1dt ./*/ | head -n 1)"

## Navigate to ApplicationPackage
cd  ApplicationPackage

##Navigate to RLM Reporting File Sample Folder
cd  "$(\ls -1dt ./*/ | head -n 1)"


##set pwd variable to rewritable permission 
RLM_REPORTING_PATH="$(pwd)"
echo $RLM_REPORTING_PATH
chmod -R 777 $RLM_REPORTING_PATH/*

我已经尝试实现以下脚本

## Script 1: Worked only to navigate till the latest folder which is 4122536
cd /home/mm13854/shtest/"$(\ls -1dt ./*/ | head -n 1)"

## As soon i tried adding /application/... , it Will return Error on directory not found
cd /opt/tableau/tableau_rlm/deployment/"$(\ls -1dt ./*/ | head -n 1)/ApplicationPackage/"$(\ls -1dt ./*/ | head -n 1)/

【问题讨论】:

  • 最新目录创建还是修改?可能无法找到创建时间,因为文件系统通常不存储它。因此,请尝试考虑其他标准,例如唯一没有 ApplicationPackage 或类似的目录
  • 就像 Fravadona 说的:至少在 Unix 下不行。也许使用 BSD(macos 等)或 Windows,您将有机会。如果您按照修改日期对它进行排序,就像您正在做的那样,如果目录中的文件已被添加或删除,或者发生 inode 更改,则不会更新修改日期。

标签: bash unix


【解决方案1】:

如果我明白你在问什么,我认为这会起作用

cd "$(ls -td /opt/tableau/tableau_rlm/deployment/*/ApplicationPackage/*/" | head -1)

【讨论】:

  • 这通常不起作用。假设生成的第一个条目是一个普通文件,那么您将 cd 到一个文件,这是不可能的。由于我们有 bash,您可以在 */ 而不是 * 中结束您的 glob 模式。这会将文件名生成限制为目录。此外,如果目录名称包含空格,您最好将表达式包含在引号中。
  • 谢谢,user1934428,我已经采纳了你的建议。
猜你喜欢
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 2012-06-12
  • 2015-04-14
  • 1970-01-01
相关资源
最近更新 更多