2
./
  folder_1
  folder_2
  folder_3
  ...
  folder_46

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

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

4

5 回答 5

4

试试这个:

cd `ls -rd folder_*`

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

于 2012-07-11T07:29:02.300 回答
2

ls不适合这种用途。您可以使用文件通配符和数组:

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]}"
于 2012-07-11T11:09:30.707 回答
0

试试这个

cd `ls -ld 文件夹_* | awk '{打印 $9}' | 排序 | sed -e '$!d'`

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

于 2012-07-11T07:24:25.203 回答
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_1folder_01orfolder_001等​​等。

于 2012-07-11T08:00:12.567 回答
0
cdlast() { cd "${!#}"; }

cdlast folder_*
于 2012-07-12T07:08:16.830 回答