• Linux用管道命令对文件的移动


    我的问题是这样的:我有一个文件夹,里面有大约有1000个文件,然后我想把这样的一部分文件给随机分成两部分,一部分含有100张,另外一部分含有剩下的所有的文件,这个时候如果是在Linux图形界面的话直接拖动即可,但是在Linux终端的话,还需要下一些功夫

    以下内容主要为管道命令

    我们知道命令ll,可以以行的形式列出当前文件夹下所有的文件以及目录,如下图

    linux中的cut命令可以以列的形式来对于字符串进行操作,类似于python中的字符串的split函数,cut用-d参数来指定以什么字符来进行分割,用-f参数来指明分割之后取出哪一行

    比如我们输入如下命令

    ll | cut -d " " -f 1

    上一句命令的意思是,对于列出的所有一行一行的字符信息,用-d后面跟的空格字符来进行分割,然后再取出来第一列

    不信我们看一下代码运行的结果

    是不是只显示了第一列了呢?

    当然我们现在需要的是所有的文件,不是目录,所以我们要先把目录过滤掉,如何过滤目录,可以参考我的这一篇blog

    命令如下

    ll | grep "^-"

    结合在一起就是

    ll | grep "^-"| cut -d " " -f 1

    结果如下图所示

    当然,我们现在需要的是一列文件的名称,所以我们抓取字符串的位置不对,也就是cut命令,后面所接的-f的参数1是不对的,至于是几,我们需要按照空格来split的话,数一数最后一个字符串的位置即可,实际上这里是11

    完整的命令是

    ll | grep "^-"| cut -d " " -f 11

    结果如下图

    没毛病,然后用head来选取前几行,比如我们选择100行,那么命令就是

    ll | grep "^-"| cut -d " " -f 11 | head -n100

    之后对于这一百行,用xargs参数替换管道命令来进行move就可以啦

    so,完整的命令是

    ll | grep "^-"| cut -d " " -f 11 | head -n100 | xargs -i mv {} ./val

    其中mv后面所跟的中括号意思是前面的字符串,至于为什么要添加-i,我试了一下,如果不添加的话,会爆找不到这个文件夹,我man了一下,发现-i命令的意思是str替换,也就是前面的字符串作为输入到{}中

    试着运行试一下,看看是不是移动到指定的文件夹了呢?

  • 相关阅读:
    软考
    十步走-阅读笔记
    软著申请
    十步走-阅读笔记
    基于Ubuntu安装部署ZooKeeper
    基于Ubuntu安装JDK(OPenJDK8)
    Intern Day89
    阿里巴巴Java研发工程师技术一面
    面试
    6_moc.md
  • 原文地址:https://www.cnblogs.com/yongjieShi/p/9607087.html
Copyright © 2020-2023  润新知