当遇到这样一个场景,需要批量把查找出来的多个文件或者目录移动到一个统一的目录下面,这时可以使用xargs命令与查询命令(例如find)结合使用再批量操作mv命令的方式来实现。

    这里结合自己遇到的一个实际场景来说明,具体操作方式如下:

    我这里因为是直接查找当前目录下的部分文件,所以就直接使用了ls命令,如果是查找分散在多个路径下的文件建议使用find命令,但是具体实现原理是一致的

    1. 首先过滤出需要移动的文件&目录
    1. ls -1 | awk '/(-{1,})/{print$0}'

    使用xargs命令批量移动文件 - 图1

    • ls -1 查找当前目录下的所有文件&目录,且只列出名称
    • awk '/(-{1,})/{print$0}' 过滤出名称中包含多个-符号的文件&目录
    1. 再加上xargs命令批量移动文件
    1. ls -1 | awk '/(-{1,})/{print$0}' | xargs -I {} mv {} ~/tmp220928-02/

    使用xargs命令批量移动文件 - 图2

    执行完命令后查看,可以发现所有过滤出来的文件已经移动到了tmp220928-02目录下去

    • xargs 参数过滤器
    • -I 将xargs的每项名称,一行一行的赋值给 {},可以用 {} 代替
      • 大写的i
      • {} 过滤数据存放
    • mv 移动文件&目录的命令
    • ~/tmp220928-02/ 目标目录,会把所有文件移动该目录下