次のサンプルサブディレクトリ名があります。
- テスト_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"