将文件移动到与文件名称相同的新文件夹中?
问题描述:
我如何才能将这些文件的名称的前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
在Bash中,最简单的方法是使用参数扩展:'dir = $ {f:0:9}'。请注意,对于正则表达式,如果文件名的长度小于9,则BASH_REMATCH将为空(因此您将在'mkdir'中出现错误)。 –
同意,这是一个更好的解决方案。 – chepner
$ {f:0:9}是做什么用的? – ergonaut