# 文件复制:如果目标文件夹不存在,先创建
# 第一个参数是源文件路径,包括文件名;第二个参数是目标文件路径,包括新文件名
使用方式 ./cp1 /user/liushilei/old/file.txt /user/liushilei/new/new_file.txt
#!/bin/sh
source=$1
des=$2
# 计算/分隔之后总共有多少列
fields=`echo ${des}|awk -F '/' '{print NF}'`
dir_fields=$((${fields}-1))
# 从第一列截取到倒数第二列
des_dir=`echo $des|cut -d '/' -f 1-${dir_fields}`
echo ${des_dir}
if [ ! -d $des ];then
mkdir -p $des_dir
fi
cp $source $des
注:
这个代码麻烦在于在目标文件路径中,找到文件夹的路径,就是找到最后一个/之前的部分
开始我想用cut -d '/' -f 1,5 这样直接截取指定段,但是/分隔之后总共有几段无法计算出来
然后我想找一个能直接截取到倒数第二个field的cut写法,但是没找到
最后实在无奈,我先用awk计算一下/分隔之后总共有几列
下面附上cut的其他几个用法
# 分隔之后是个数组,取第二个field
echo "/user/local/liushilei/file.txt"| cut -d '/' -f 2
# 取第一个到到第三个
echo "/user/local/liushilei/file.txt"| cut -d '/' -f 1-3
# 取第一个开始后到所有
echo "/user/local/liushilei/file.txt"| cut -d '/' -f 1-
# 取第一个到第三个和第五个
echo "/user/local/liushilei/file.txt"| cut -d '/' -f 1-3,5
# 我还没找到取第一个到倒数第二个的写法