提取目录中子目录名称的末尾

提取目录中子目录名称的末尾

我有示例子目录名称,例如:

  • 测试_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"

相关内容