AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1199879
Accepted
Negrito
Negrito
Asked: 2020-01-01 19:49:35 +0800 CST2020-01-01 19:49:35 +0800 CST 2020-01-01 19:49:35 +0800 CST

如何复制/移动具有两个以上关键字的文件

  • 772

我有一个这样的文件列表(长列表,不是全部):

在此处输入图像描述 我想用关键字“QM”和“.h5”过滤文件,所以我输入ls|grep "QM"|grep "h5"并显示这些(我需要的) 在此处输入图像描述

所以基本上我想将这些文件移动到另一个目录,但我不知道如何用一行脚本移动它们。

另外,有没有办法随机选择这些文件中的 5 个并将它们复制到另一个目录?

grep copy
  • 3 3 个回答
  • 922 Views

3 个回答

  • Voted
  1. waltinator
    2020-01-01T20:51:32+08:002020-01-01T20:51:32+08:00

    “很多文件”?“名称中包含有趣字符的文件”?

    这要求find和xargs!

    阅读man find;man xargs并执行以下操作:

    find . -maxdepth 1 -name '*QM*.h5' -print0 |\
      xargs -0 --no-run-if-empty mv --target-directory=AnotherDirectory
    

    注意:“ AnotherDirectory”必须已经存在。

    注意:通过最初将“ mv”替换为“”来查看结果echo mv。

    • 1
  2. Best Answer
    steeldriver
    2020-01-02T06:19:14+08:002020-01-02T06:19:14+08:00

    Shell glob 将在这里成为您的朋友。

    例如grep,您可以列出名称包含QM并以 using 结尾的所有文件,而不是.h5using

    ls *QM*.h5
    

    可以在mv和cp操作中使用 glob,前提是匹配文件的数量不太大

    cp *QM*.h5 path/to/new_dir/
    

    如果文件数量太大,可能会argument list too long报错;您可以使用 shell 的printf内置功能xargs来解决这个问题,将副本分成可管理的块:

    printf '%s\0' *QM*.h5 | xargs -0 cp -t path/to/new_dir/
    

    使用 bash,没有内在的方法来限制所选文件的数量(或选择随机子集),但您可以通过添加调用来做到这一点shuf:

    printf '%s\0' *QM*.h5 | shuf -zn5 | xargs -0 cp -t path/to/new_dir/
    

    请注意,我使用空字节\0而不是换行符来分隔文件名列表 - 在您的情况下这不是必需的,但可以使命令在文件名本身可能包含换行符的更一般情况下可用。

    如果您不介意切换到 z shell zsh,那么您可以使用 shell 更具表现力的glob 限定符来选择一个随机子集,而无需借助外部实用程序:

    cp -t path/to/new_dir/ *QM*.h5(Nnoe['REPLY=$RANDOM'][1,5])        # zsh only
    

    我们的 Unix 和 Linux 姊妹网站上的相关问题:

    • 如何使用bash从文件夹中选择一个随机文件而不重复?
    • 1
  3. Negrito
    2020-01-01T21:32:52+08:002020-01-01T21:32:52+08:00

    刚刚cp *QM*.h5 target_dir完成。

    • 0

相关问题

  • 如何让 grep 只显示匹配的正则表达式?

  • 如何 grep 字符串变量的内容?

  • 拖尾两个日志文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve