从文件名的一部分创建文件夹,并在那里移动相应的文件 - bash脚本

时间:2017-08-15 21:18:57

标签: bash

有两个目录 finch_data / filteredfirst /对齐 与文件

firstZBND1X.sam
firstZBND2V.sam
firstZBND3X.sam
firstZBND4X.sam
firstZBND5X.sam

和 finch_data / filteredsec /对准

secZBND1X.sam
secZBND2V.sam
secZBND3X.sam
secZBND4X.sam
secZBND5X.sam

我创建了一个文件夹 finch_data / filteredsec /组合 我已经移动了所有我的第一个* .sam和sec * .sam文件。

现在我需要使用前缀first或sec和.sam之间的文件鬃毛创建单独的子文件夹。所以,文件夹如:

ZBND1X
ZBND2V
ZBND3X
ZBND4X
ZBND5X

然后我需要将带有这些名称字符串的文件移动到相应的文件夹中。

任何有一行bash的人都可以这样做吗?

这是我从其他论坛得到的距离越近

find . -name "*.sam" -exec sh -c 'mkdir "${1%.*}" ; mv "$1" "${1%.*}" ' _ {} \;

1 个答案:

答案 0 :(得分:3)

这将对前缀为first的文件执行此操作(对sec执行类似操作):

#!/bin/bash

prefix=first
for file in ${prefix}*; do
    base="${file%.sam}"
    dir="${base#$prefix}"
    mkdir -p "$dir"
    mv "$file" "$dir"
done

它不是一个可爱的oneliner,但它可读。如果你愿意,你可以把它写成一行。

我们简单地遍历当前目录中以$prefix为前缀的所有文件,通过剥离已知扩展名和已知前缀来计算dir名称,然后创建目录(如果需要,使用{{1}如果dir已经存在,我们不会收到警告),最后在目标目录中移动文件。如果您愿意,您也可以在这里将文件重命名为不同的文件,也可以从文件名中删除目录名等。