我想要删除在我的文件列表中与R1.fastq.gz
不匹配的所有文件。如何使用反向匹配来使用rm
命令?
使用在 bash
中可用的扩展模式语法:
shopt -s extglob
printf '%s\n' !(R1.fastq.gz) # To verify the list of files the pattern matches
rm !(R1.fastq.gz) # To actually remove them.
或者使用 find
:
find . ! -name R1.fastq.gz -print # Verify
find . ! -name R1.fastq.gz -exec rm {} + # Delete
如果您的find
版本支持它,可以使用-delete
代替-exec rm {} +
:
find . ! -name R1.fastq.gz -delete
ls | grep -v "file_with_string_you_dont_want_to_delete" | xargs rm -f
grep -v
,该选项意味着 "选择不与正则表达式匹配的行。",然后将它们删除。rm $(ls | grep -v -e"R1.fastq.gz")
应该可以做到。R1.fastq.gz
。-e "name"
,例如 rm $(ls | grep -v -e "file1" -e "file2" -e "file3")
。 - ingroxd创建文件,则此代码将扩展
`作为全局通配符并删除目录中的所有内容,*包括 R1.fastq.gz
文件。 - Charles Duffyls
,即使我仍然认为两年前所说的话:在某些情况下,使用和解析它是完全安全的[:] - ingroxd
rm
是不可能的,你需要使用类似于find
与rm
的组合:在Linux中如何删除除了*.txt模式之外的所有文件? - t.niesebash
的extglob
特性 - 也在您链接的答案中提到。 - Arkadiusz Drabczyk