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