我有一个看起来像这样的列表
ABC_100.0_k_1x1x1.xyz
ABC_100.0_k_1x1x1.txt
ABC_100.0_k_2x2x2.xyz
ABC_100.0_k_2x2x2.txt
ABC_100.0_k_10x10x10.xyz
ABC_100.0_k_10x10x10.txt
ABC_600.0_k_1x1x1.xyz
ABC_600.0_k_1x1x1.txt
ABC_1000.0_k_1x1x1.xyz
ABC_1000.0_k_1x1x1.txt
我想编写一个创建以下文件夹的脚本
ABC_100.0_k_1x1x1
ABC_100.0_k_2x2x2
ABC_100.0_k_10x10x10
ABC_600.0_k_1x1x1
ABC_1000.0_k_1x1x1
我试过以下
#!/bin/bash
for file in *_???.*_?x?x?.*
do
dir=${file%}
dir=${dir%.*}
mkdir -p "./$dir" &&
scp -r "$file" "./$dir"
done
但我只得到文件夹
ABC_100.0_k_1x1x1
ABC_600.0_k_1x1x1
我究竟做错了什么?也许这很愚蠢,但这是我第一次尝试 shell 脚本
这是一个有效的快速而肮脏的脚本:
您的某些文件与模式_???不匹配。_?x?x?.*
另一种脚本是:
符号?替换单个字符,因此它仅适合序列 1x1x1 或 2x2x2,而不是 10x10x10(10 由两个字符组成)。我添加了一个 if 语句只是为了避免重新创建同一个文件夹。
如果所有文件都配对,带有 a
.txt
和.xyz
扩展名,那么一个简单的解决方案将是