有两个目录 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%.*}" ' _ {} \;
答案 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已经存在,我们不会收到警告),最后在目标目录中移动文件。如果您愿意,您也可以在这里将文件重命名为不同的文件,也可以从文件名中删除目录名等。