【问题标题】:How to find all files in a directory and subdirectories that contain using partial names within a list then copy them to a new folder如何在列表中查找包含使用部分名称的目录和子目录中的所有文件,然后将它们复制到新文件夹
【发布时间】:2020-06-08 06:15:21
【问题描述】:

您好,当我拥有文件的全名(通常我使用 rsync 或简单的 cp 命令)时,我知道如何执行此操作,但我只有部分名称。

这是我有时用于列表中文件的简单脚本:

# Run pipeline
echo "Loading "
paste sample_id.txt |while IFS="$(printf '\t')" read -r sample;

do

cd $dirpath

cp -a source_directory/"$sample"*.fastq /output directory/;done

当我有完整的文件名时,这似乎可以正常工作,但是当我有一个包含部分文件名的列表时,我希望能够运行它。

例如,我的目录包含数千个双端 fastq 文件:

  • ABF-0123-FGHKL_1.fastq
  • ABF-0123-FGHKL_2.fastq
  • ABG-0567-G456_1.fastq
  • ABG-0567-G456_2.fastq

我的样本 id 列表包含:

  • ABF-0123
  • ABG-0567

预期结果:

  • ABF-0123-FGHKL_1.fastq
    • ABF-0123-FGHKL_2.fastq
    • ABG-0567-G456_1.fastq
    • ABG-0567-G456_2.fastq 谢谢!

【问题讨论】:

  • 欢迎来到 Stack Overflow。 SO 是面向专业和热情的程序员的问答页面。将您自己的代码添加到您的问题中。您应该至少展示自己为解决这个问题所做的研究。
  • stackoverflow.com/questions/61843060/… 可能是你想要的。
  • @Cyrus 我添加了我的代码。
  • 使用find 你可能会发现所有文件都匹配一个模式。或者,您可以使用ls 输出文件列表并通过grep/awk/... 搜索列表。对于多个模式,您可以将其组合成一个正则表达式(pattern1|pattern2) 或重复搜索每个模式。拥有匹配文件的列表,您可以根据需要对它们进行处理,例如复制。这种方法有什么问题?

标签: linux bash grep copy cp


【解决方案1】:

您可以使用:

for sample in $(cat sample.txt); do
    find ${source_directory} ${sample}*.fastq -exec cp {} ${output_directory} \;
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2014-06-20
    • 2021-12-17
    • 1970-01-01
    • 2012-07-12
    • 2017-04-13
    相关资源
    最近更新 更多