这应该是一个相对简单的问题,但我没有在stackoverflow中找到任何答案。在给定目录中,我有~1000个编号的文件(例如chem-0320.inp)。我想将编号的文件cp到相应编号的目录;所有复制的文件将使用相同的名称重命名。我想为指定数量的文件(例如#300-500)执行此操作。
例如,我想将chem-0320.inp复制到名为320的目录并将其重命名为mech.dat。 另一个例子:将chem-0430.inp复制到名为430的目录并将其重命名为mech.dat。
提前感谢您的帮助!
答案 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