我在一个目录中有一个文件列表,例如。。

LDI_P1800-id1.0200.bin
LDI_P1800-id2.0200.bin
...
LDI_P1800-id17.0200.bin
LDI_P1800-id18.0200.bin
...
...
LDI_P1800-id165.0200.bin
LDI_P1800-id166.0200.bin
...

我想把它们都移到目录里
LDI_P1800-id165.0200.bin to ../id165/.
LDI_P1800-id166.0200.bin to ../id166/.
LDI_P1800-id167.0200.bin to ../id167/.
...

等等。
我猜我必须使用正则表达式从字符串中提取id
for file in *.0200.bin ; do
    "extracting id from each file"
    mv $file ../id$id/.
done

有人能帮我吗?谢谢您!!

最佳答案

尝试以下纯bash解决方案:

for file in *.0200.bin
do
    id=${file#*-}      # delete everything upto the first hyphen
    id=${id%%.*}        # delete everything after the first dot
    [[ ! -d ../$id ]] && mkdir ../$id       # if the directory doesn't exist create it
    mv $file ../$id
done

也可以在sed中完成,但我更喜欢第一种方法:
for file in *.0200.bin
do
    id=$(sed 's/[^-]*-\([^\.]*\).*$/\1/g' <<< $file)
    mkdir -p ../$id && mv $file ../$id
done

10-06 07:47