ディレクトリのサブディレクトリ名の末尾を抽出します。

ディレクトリのサブディレクトリ名の末尾を抽出します。

次のサンプルサブディレクトリ名があります。

  • テスト_ABCDEF_406_1
  • テスト_ABCDEF_AOH_1
  • テスト_ABCDEF_AUQ_1

Testという大きなディレクトリにあります。

「ABCDEF_**を効率的に削除する方法_" または Test_ 以降のすべての項目を使用して、次のようになります。

  • ABCDEF_406_1
  • ABCDEF_AOH_1
  • ABCDEF_AUQ_1

違いがある場合は、上記はファイルではなくフォルダであることに注意してください。

答え1

サブディレクトリのパス名を繰り返し、パラメータ置換を使用して最初の部分を削除します。

#!/bin/sh

for dirpath in Test/Test_*/; do
    # Because of the pattern used above, we know that
    # "$dirpath" starts with the string "Test/Test_",
    # and this means we know we can delete that:

    # But first delete that trailing /
    dirpath=${dirpath%/}

    shortname=${dirpath#Test/Test_}

    printf 'The shortened name for "%s" is "%s"\n' "$dirpath" "$shortname"
done

${variable#pattern}代替品は、(最も短い)一致が削除される標準代替品です。patternスタート$variable

同様に、削除されるコードから末尾の最短一致を削除${variable%pattern}するために使用されます。/pattern終わり$variable

次のディレクトリツリーでテストします。

.
`-- Test/
    |-- Test_ABCDEF_406_1/
    |-- Test_ABCDEF_AOH_1/
    `-- Test_ABCDEF_AUQ_1/

このコードは

The shortened name for "Test/Test_ABCDEF_406_1" is "ABCDEF_406_1"
The shortened name for "Test/Test_ABCDEF_AOH_1" is "ABCDEF_AOH_1"
The shortened name for "Test/Test_ABCDEF_AUQ_1" is "ABCDEF_AUQ_1"

関連情報