在 *nix cd 命令中将目录更改为最后一个匹配项


./
  folder_1
  folder_2
  folder_3
  ...
  folder_46

对于第一场比赛 -> cd folder_* -> folder_1

但是最后一场比赛该怎么办(folder_46(

试试这个:

cd `ls -rd folder_*`

总有一个较短的代码:)

ls不适合

这种类型的使用。您可以使用文件通配和数组:

dirs=(folder_*/); cd "${dirs[@]: -1}"

球体保证按词法顺序扩展。数组切片访问数组的最后一个成员。

您可以创建一个自动删除数组的函数:

cdl () { declare -a dirs=(${1:-folder_}*/); cd "${dirs[@]: -1}"; }

这默认为前缀"folder_",但它将接受一个参数来使用另一个前缀:

cdl dirname-

函数内部的declare使变量成为函数的本地变量。

如果您使用的是 Bash 4.2,则可以直接访问最后一个数组元素,而不是使用上面的切片:

cd "${dirs[-1]}"

试试这个

CD 'ls -ld folder_* | awk '{print $9}' | sort | sed -e '$!d''

但我想你必须folder_01命名你的文件夹,folder_02而不是folder_1、folder_2、......

cd $(find . -maxdepth 1 -type d -name "folder_*" | sort -t_ -k2 -n -r | head -1)

即使目录太多(ls会因错误而死亡too many arguments也可以工作。 它适用于folder_1.. folder_[any_number] .您无需将folder_1重命名为 folder_01folder_001 等等。

cdlast() { cd "${!#}"; }
cdlast folder_*

相关内容

最新更新