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;

二 命令说明:

  1. 框架:for i in '范围语句'; do <操作语句>; done;
  2. 范围语句:以查询结果作为范围语句:find /home/ruxianliuying/Storage/ -maxdepth 5 -name '*.JPG' ;,表示在/home/ruxianliuying/Storage/目录下检索JPG格式的文件,检索深度为5级目录;
  3. 操作语句:do j=${i##*/} mv $i "/usr/local/images/Storage/2018/05/17/"$j。执行了两件事:第一,给变量j赋值,j获取到的是i去除掉dir之后的basename;第二,将作为basename的j和目的路径组合起来作为mv的目的位置,通过mv语句,以i作为起始路径,以组合路径作为目的路径,实现移动功能。
  4. 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