在一个命令中,使用 ls -lt 转到最近修改的目录

在一个命令中,使用 ls -lt 转到最近修改的目录

当我浏览日志时,我使用它ls -lt来查看最近修改的文件夹。是否有一个快捷方式可以在一个命令中进入此文件夹?也许管道到其他命令可以解决问题?

例如:ls -lt输出:

1 -folder

2 -folder

3 -folder

怎样才能cd进入文件夹 1 而不复制和粘贴其名称?

答案1

如果您可以ls再次运行,则可以使用 bash 函数:

function cd1()
{
 # cd to most recently modified directory in current path
 local c=$(ls -tF | grep '/$' | head -n 1)
 if [ ! -z "$c" ]; then cd "$c"; fi
}

答案2

一种更丑陋的方法是创建一个别名,我们在其中捕获第一个目录*行,同时让所有行都转到标准输出:

alias ls-lt='ls -lt | awk --re-interval '\'' {print}; /^d/ && !first {sub( /^([^ ]+ +){8}/, ""); print $0 > "/tmp/first.tmp"; first=$0}'\''; eval cd "$(cat /tmp/first.tmp)"'

这里您应该使用 ls-lt 而不是 ls -lt,这样可以看到相同的输出,同时还可以进行 cd-ing。

  • 请注意,如果在主目录中创建了一个常规文件,那么它可能是 ls -lt 的第一个元素,而这显然不是 cd 的主题。

答案3

这是迄今为止提供的所有答案中最短的命令。实际上,它并没有回答实际问题,因为从技术上讲,问题是解析“ ls -lt”的输出。但是,如果我假设“ ”的目的ls -lt是按时间排序显示目录,那么这个答案确实实现了实际预期的目标。

cd "$( ls -1Ft | grep /$ | head -1 )"

(注意:“ls”命令和“head”命令的参数包含数字,而不是小写的 L。)

编辑:我刚刚添加了引号,因为一些测试表明,如果目录名称中有空格,它们也会使命令起作用。

相关内容