CENTOS 7批量移动文件
- 一 批量移动文件命令:
- 参考
- 需求
- 移动指令
- 二 命令说明:
- 三 附Linux Shell操作符说明:
- 参考网址:
- Shell中的`${}、##`和`%%`使用范例:
- 记忆的方法为:
- 也可以对变量值里的字符串作替换:
一 批量移动文件命令:
需求
将/home/ruxianliuying/Storage/下的七幅图片批量移动到/usr/local/images/Storage/2018/05/17/目录下。
移动指令
for i in `find /home/ruxianliuying/Storage/ -maxdepth 5 -name '*.JPG' ;`; do j=${i##*/} mv $i "/usr/local/images/Storage/2018/05/17/"$j;done;
二 命令说明:
- 框架:
for i in '范围语句'; do <操作语句>; done;
- 范围语句:以查询结果作为范围语句:
find /home/ruxianliuying/Storage/ -maxdepth 5 -name '*.JPG' ;
,表示在/home/ruxianliuying/Storage/目录下检索JPG格式的文件,检索深度为5级目录; - 操作语句:
do j=${i##*/} mv $i "/usr/local/images/Storage/2018/05/17/"$j
。执行了两件事:第一,给变量j赋值,j
获取到的是i
去除掉dir之后的basename;第二,将作为basename的j
和目的路径组合起来作为mv的目的位置,通过mv语句,以i
作为起始路径,以组合路径作为目的路径,实现移动功能。 - basename的获取:
j=${i##*/}
,表示截取i
最后一个'/'
之后的内容。比如i
的值为/home/ruxianliuying/Storage/sa.JPG
,那么j
获取的值就是sa.JPG
。
三 附Linux Shell操作符说明:
参考网址:
Shell中的${}、##
和%%
使用范例:
假设定义了一个变量为: file=/dir1/dir2/dir3/my.file.txt
可以用${ }
分别替换得到不同的值:
-
${file#*/}
:删掉第一个/
及其左边的字符串:dir1/dir2/dir3/my.file.txt
-
${file##*/}
:删掉最后一个/
及其左边的字符串:my.file.txt
-
${file#*.}
:删掉第一个.
及其左边的字符串:file.txt
-
${file##*.}
:删掉最后一个.
及其左边的字符串:txt
-
${file%/*}
:删掉最后一个/
及其右边的字符串:/dir1/dir2/dir3
-
${file%%/*}
:删掉第一个/
及其右边的字符串:(空值)
-
${file%.*}
:删掉最后一个.
及其右边的字符串:/dir1/dir2/dir3/my.file
-
${file%%.*}
:删掉第一个.
及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
-
#
是去掉左边(键盘上#
在$
的左边) -
%
是去掉右边(键盘上%
在$
的右边) - 单一符号是最小匹配;两个符号是最大匹配
-
${file:0:5}
:提取最左边的 5 个字节:/dir1
-
${file:5:5}
:提取第 5 个字节右边的连续5个字节:/dir2
也可以对变量值里的字符串作替换:
-
${file/dir/path}
:将第一个dir
替换为path
:/path1/dir2/dir3/my.file.txt
-
${file//dir/path}
:将全部dir
替换为path
:/path1/path2/path3/my.file.txt