2

私がこのフォルダ構造を持っているとしましょう:

MainFolder
    Folder1
    Folder2
    Folder3
    ...
    Folder200

現在Folder2内にいてスクリプトを実行すると、リスト内の次のディレクトリ(この場合はFolder3)に自動的に変更されるスクリプトを作成したいと思います。制限は、フォルダに任意の名前を付けることができ、名前を変更できないことです。

だから私の質問は:

1)リストの次のディレクトリを知るにはどうすればよいですか?ディレクトリのサブディレクトリに、次に来るディレクトリを知るために使用できるシーケンシャルインデックス番号があるかどうか疑問に思いました。

2)スクリプトの最後に新しいディレクトリの名前を表示したいのですが、ディレクトリ名だけを表示する方法はありますか?(例:「pwd」の結果である/ home / path / to / dir / Folder3の代わりにFolder3)

4

2 に答える 2

0

シーケンスに穴がないと仮定すると、これは機能するはずです。

cdn()
{
  cd ${PWD%%[0-9]*}$(( $(echo $PWD | sed 's/.*[^0-9]//')+1))
}

編集:「ディレクトリには任意の名前を付けることができます」というステートメントを見落としていたようです。あなたの例から、私はそれらが末尾の数値IDを持っていると仮定しました...

例で Folderxx の代わりにランダムな名前を付けた場合は、より明確になります。

Edit2:これは、要件に合ったシェル関数です。

cdn()
{
    for i in $(echo "/\/$(basename $PWD)$/
+1,\$p
Q" | ed -s !"ls -d ../*" | tail -n +2)
    do
        \cd $i 2>/dev/null && echo $(basename $PWD) && break
    done
}
于 2012-10-20T23:53:25.723 に答える
0
  1. ディレクトリが処理される順序を定義するものは何ですか? 名前にスペースやその他の特殊文字が含まれていないディレクトリがある場合は、 を使用lsしてディレクトリを順番に一覧表示し、現在のディレクトリの後に名前を見つけることができます。

    cwd=$(basename $PWD)
    nwd=$(ls .. | awk "/^$cwd$/ { found = 1; next; } { if (found) { print; found = 0 } }")
    if [ -d ../$nwd ]
    then cd ../$nwd
    fi
    
  2. ディレクトリの名前 (のみ) は、basename $PWDまたはを使用して検索され${PWD##*/}ます。

于 2012-10-20T23:41:53.203 に答える