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

时间:2012-07-11 07:14:02

标签: linux bash unix sh cd

./
  folder_1
  folder_2
  folder_3
  ...
  folder_46

首场比赛 - > cd folder _ * - > FOLDER_1

但是为最后一场比赛做什么(folder_46)

5 个答案:

答案 0 :(得分:4)

试试这个:

cd `ls -rd folder_*`

总是有一个更短的代码:)

答案 1 :(得分:2)

ls不适合此类用途。您可以使用文件globbing和数组:

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

保证glob在词汇顺序上扩展。数组切片访问数组的最后一个成员。

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

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

默认为“folder_”的前缀,但它会接受使用另一个前缀的参数:

cdl dirname-
函数内的

declare使变量本地化为变量。

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

cd "${dirs[-1]}"

答案 2 :(得分:0)

试试这个

  

cd`ls -ld folder_ * | awk'{print $ 9}'|排序| sed -e'$!d'`

但我猜您必须将文件夹命名为folder_01,folder_02而不是folder_1,folder_2,...

答案 3 :(得分:0)

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,依此类推。

答案 4 :(得分:0)

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

cdlast folder_*