将文件移动到与文件名称相同的新文件夹中?

将文件移动到与文件名称相同的新文件夹中?

问题描述:

我如何才能将这些文件的名称的前9个字符的9个字符将文件移动到与文件名称相同的新文件夹中?

example 

    I have a folder containing number of files with various names each 
    group of files begin with same 9 characters ex: 

    first group [HD9523587_352, HD9523587_258, HD9523587_785 ,HD9523587_473] 
    second group[Hip046329_258, Hip046329_364, Hip046329_681, Hip046329_235] 

    and so on 

我需要新的文件夹使用相同的9个字符的同名分享到创建的文件夹的文件组每个 组然后将每个组文件移动到这些文件夹中。 谢谢

只提取前9个字符用作目录名称。在bash中,最简单的方法是使用 正则表达式匹配 参数子字符串扩展。

for f in *; do 
    # [[ $f =~ ^(.{9}) ]] 
    # dir=${BASH_REMATCH[1]} 
    dir=${f:0:9} 
    mkdir -p "$dir" && mv "$f" "$dir" 
done 
+1

在Bash中,最简单的方法是使用参数扩展:'dir = $ {f:0:9}'。请注意,对于正则表达式,如果文件名的长度小于9,则BASH_REMATCH将为空(因此您将在'mkdir'中出现错误)。 –

+1

同意,这是一个更好的解决方案。 – chepner

+0

$ {f:0:9}是做什么用的? – ergonaut