bash:cd到最近修改的子目录


10

想知道是否有一种简单和/或便携式的方式来表示“更改为最近修改的子目录”。我可以使用ls和awk,但是可能有更好的方法。

cd $( ls -ltrd */ | tail -1 | awk '{ print $8 }' )

我必须在具有数百个子目录的“输出文件”目录中运行命令,并且有99%的时间我想转到最近更改的目录。我不知道目录的名称是什么。


1
为什么不cd $(ls -v1td */ | head -1)呢?
Pablo Castellazzi

好点...我对ls选项的熟悉程度不如我应该...
twblamer 2011年

Answers:


13

假设您的目录不包含任何不可打印的字符:

cd  "$(\ls -1dt ./*/ | head -n 1)"

(请注意,它还将考虑目录的符号链接)。

如果您不介意切换到zsh:

cd ./*(/om[1])

或如第一个示例所示,包括指向目录的符号链接:

cd ./*(-/om[1])

0

请享用。

cdd(){ 
  # cd into the last directory modified/created in pwd
   ls -p | grep / | tail -1 | pbcopy; str=$(pbpaste); cd $str
}

为什么要将目录名称放在剪贴板上?另外,ee如果目录名称包含空格,会发生什么情况-最近很常见。
roaima

如果需要,使用剪贴板可以简化进一步的操作。
jasonleonhard

如果您确实想要,可以相对容易地添加更多字段。您可以随意使用{print $ 9,$ 10,$ 11}来代替{print $ 9}。
jasonleonhard

我已经修改了答案,以解决空白问题。
jasonleonhard

这是一个大概的解释:explainshell.com/…–
jasonleonhard

-1

试试这个简短的版本化命令

cd $(ls -t | head -n 1)   

仅当当前目录中最近修改的文件的类型为directory(或指向目录的符号链接)并且其名称不包含空格,通配符或换行符且不以-开头时,该选项才有效。因此,与已经接受的答案。
斯特凡·查泽拉斯18'Feb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.