目录(mydir)有1000个文件(ls | wc -l),但是我只想将那些具有file.num.txt的文件复制到目录num。这是一个例子:
所以我想复制file.1.txt到DIR1,file.2.txt在DIR2等等。
这应该工作:
#!/bin/bash
src="mydir"
dest="/home/user1/store"
dir="dir" #name of the dir without number, i.e dir from dir1, dir2
regex='(.*\.)([0-9]+)(\.txt$)'
for file in "$src"/*;do
if [[ -f $file ]];then
if [[ $file =~ $regex ]];then
mkdir -p "$dest"/"$dir${BASH_REMATCH[2]}"
cp "$file" "$dest"/"$dir${BASH_REMATCH[2]}"
fi
fi
done
解释:
${BASH_REMATCH[2]}
包含$file
与pattern匹配的捕获的#2组(这是文件名的数字部分)$regex
。模式匹配在if语句中完成:
if [[ $file =~ $regex ]];then
mkdir -p
用于目录结构不存在的情况,它将创建它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句