使用Linux bash命令或脚本将编号的文件复制到相应的编号目录

时间:2014-11-17 16:17:53

标签: linux bash copy

这应该是一个相对简单的问题,但我没有在stackoverflow中找到任何答案。在给定目录中,我有~1000个编号的文件(例如chem-0320.inp)。我想将编号的文件cp到相应编号的目录;所有复制的文件将使用相同的名称重命名。我想为指定数量的文件(例如#300-500)执行此操作。

例如,我想将chem-0320.inp复制到名为320的目录并将其重命名为mech.dat。 另一个例子:将chem-0430.inp复制到名为430的目录并将其重命名为mech.dat。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

以下脚本可以为您完成工作

for file in *.inp
do  
 dir=$(echo $file | sed -r 's/[^0-9]+0([0-9]+).*/\1/g')
 mv $file $dir/mech.dat 
done

答案 1 :(得分:0)

“cd”从第一个到右边。 Subdirs将在那里创建。

#!/bin/bash

lo_limit=300
hi_limit=500

for file in ./*.inp
do
    dir="${file//[^0-9]/}"
    dir_cut="${dir:1:3}" # leading zero cut off
    if  [ $dir_cut -ge $lo_limit ] && [ $dir_cut -le $hi_limit ]; then
        echo "$file  $dir_cut"
        mkdir -p "$dir_cut"
        cp "$file" "$dir_cut"/mech.dat
    fi 
done