2
./
  folder_1
  folder_2
  folder_3
  ...
  folder_46

最初の一致の場合 -> cd folder_* -> folder_1

しかし、最後の試合(folder_46)のために何をすべきか

4

5 に答える 5

2

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

これを試して

cd `ls -ld フォルダー_* | awk '{print $9}' | ソート | sed -e '$!d'`

ただし、フォルダーの名前は、folder_1、folder_2、... ではなく、folder_01、folder_02 にする必要があると思います。

于 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 argumentsfolder_1folder_[any_number]folder_1folder_01folder_001

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

cdlast folder_*
于 2012-07-12T07:08:16.830 に答える