当我浏览日志时,我使用它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。)
编辑:我刚刚添加了引号,因为一些测试表明,如果目录名称中有空格,它们也会使命令起作用。