摘要:split命令、拆分文件名
split命令
用途:将一个大文件按照需求分割为多个小文件。
常用参数:
1 | -b <文件大小>:以文件大小分割文件。(单位:k,M,G,c,w)分别为 kb,mb,gb,byte,word |
eg.split -b 10k data.txt
:将data.txt文件分割为大小为10k的文件(最后一个文件可能不足10k)
split命令生成的文件默认前缀为x
,在命令最后可以设置前缀名.
eg.split -b 10k data.txt split_file
:将data.txt文件分割为大小为10k的文件,且分割后的文件以split_file
开头。
根据扩展名切分文件名
获取文件名
${VAR%.*}
: 从$VAR中删除位于%
右侧的通配符所匹配的字符串(在这个里是.*
)。通配符从右向左匹配,匹配到一个就返回(非贪婪)。
eg.1
2
3file_jpg="file1.jpg"
name=${file_jpg%.*}
echo $name
输出结果:file1
到这里”通配符从右向左匹配“这句话还没有意义。因为想上面这种文件名为”file1.jpg”的文件从左或者从右都可以正确获取到文件名”file1”。当时加入文件名为”file1.test.jpg”这种文件命中包含.
这句话就有了解释。因为在我们文件名称中只要是在最后一个.
前面的都被认为是文件名的一部分(后面的被认为是拓展名)。所以${VAR%.*}
的规则是从右向左匹配,这样才能获得完整的文件名。
但是假如我只想获得第一个.
前面的字符串需要怎么办呢?
%
属于非贪婪操作。%%
为贪婪的行为模式。
所以${VAR%%.*}
就可以获取第一个.
前面的字符串了。
${VAR%%.*}
: 从$VAR中删除位于%%
右侧的通配符所匹配的字符串(在这个里是.*
)。通配符从右向左匹配,直到匹配到最后一个(贪婪)。
ps.可以当做是从左向右开始匹配,这样有助于理解,但记忆时最好还是通过贪婪/非贪婪的方法记忆。
eg.
1 | file_jpg="file1.test.jpg" |
输出结果:file1.test
1 | file_jpg="file1.test.jpg" |
输出结果:file1
获取扩展名
${VAR#*.}
: 从$VAR中删除位于#
左侧的通配符所匹配的字符串(在这个里是*.
)。通配符从左向右匹配,匹配到一个就返回(非贪婪)。
获取扩展名和获取文件名的命令类似只是%
变成#
。
同样#
是非贪婪的,##
是贪婪的。而且获取扩展名时通配符从左向右匹配。因此对于“file1.test.jpg”${VAR#*.}
获取到的为”test.jpg”,很明显并不是真正的扩展名。
所以对于获取扩展名##
的贪婪匹配更能准确的获得文件拓展名。
注意通配符.*
和*.
的区别。
通常我们获取扩展名都是使用${VAR##*.}