尝试使用标头列表和通配符删除文件。文件的标头相同,但结尾不同。不知道如何在那里获取通配符。
我试图从 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