如何从list.txt中删除文件并使用通配符?

如何从list.txt中删除文件并使用通配符?

尝试使用标头列表和通配符删除文件。文件的标头相同,但结尾不同。不知道如何在那里获取通配符。

我试图从 NCBI 下载一些 SRA 文件,但遇到了下载问题。未正确下载的文件创建了 file1.fastq 和 file1.sra.cache(对于 file2、file3 等...)正确下载的文件为我提供了 file.fastq 和 file.sra.cache,因此我的下载看起来像这样:

file1.fastq
file1.sra
file2.fastq
file2.sra.cache
file3.fastq
file3.sra.cache

其中 file1 已成功下载,但 file2 或 file3 未成功下载。我想删除与 file2 和 file3 关联的所有文件。

我找出了哪些文件没有正确下载ls *.sra.cache。我现在有一个错误文件头的列表(例如,file2,file3,...;所以只是开始部分)。我如何输入文件名列表并添加通配符来删除它们?

我想制作一个带有通配符的文件名列表,例如

file2*
file3*

并做类似的事情cat list.txt | xargs rm,但我不知道如何让通配符在那里工作。*如果我将它放入列表本身,Unix 会认为是文件名的一部分。

答案1

无需使用单独的文件列表或类似的内容,您可以使用简单的for循环,例如:

for f in *.sra.cache; do
    rm -- "${f%sra.cache}"*
done

${f%sra.cache}sra.cache从文件名中删除扩展名。

答案2

zsh

rm -f -- *.sra.cache(e['reply=($REPLY $REPLY:r:r.fastq)'])

这会删除每个文件的.sra.cache相应文件。.fastq*.sra.cache

$var:r为您提供类似于 csh / vim 中r的 oot 名称(删除了一个扩展名)。$var$var

相关内容