如何删除多个同名文件?

如何删除多个同名文件?

我有很多 txt 文件,名称为“file1.txt file2.txt file3.txt ... file1000.txt 如何删除所有这些文件?”我是 unix 新手,担心意外删除目录中的其他文件。

我看过其他问题,但我不确定,我可以做类似的事情吗

rm -v !("differentfile"|"anotherfile"|"otherfile"|"finalfile") 

因此删除所有具有相同名称和不同编号的文件并保留我想要的几个文件?此行应该只删除我的工作目录/文件夹中的文件,正确吗?

有没有办法使用 rm 但只删除我想一次性删除的特定文件?

答案1

rm file*.txt将删除当前目录中名称以 string 开头file并以 string 结尾的所有文件.txt

如果有许多其中,您将收到“参数列表太长”错误。在这种情况下,您可以使用

find . -maxdepth 1 -name 'file*.txt' -delete

反而。

这将使用该find命令查找file*.txt当前目录中名称匹配的任何文件,并将其删除。该-maxdepth 1选项限制find进入除.(当前目录)之外的任何子目录。

该命令不会区分文件和目录(就像rm file*.txt两者都不会一样)。如果您想确保只删除常规文件,请使用

find . -maxdepth 1 -type f -name 'file*.txt' -delete

对于find没有非标准-delete和/或-maxdepth选项的实现,请使用

find . ! -path . -prune -type f -name 'file*.txt' -exec rm -f {} +

或者,您可以使用一个简单但缓慢的循环:

for name in file*.txt; do
    rm -f "$name"
done

答案2

如果没有相同结构的其他文件,请使用带有前缀“file”的所谓的通配符。星号表示任何其他字符串(包括空字符串)。首先使用“ls”(列表)而不是“rm”进行检查:

ls file*.txt

您还可以将其范围缩小到“文件”之后的至少一个数字以及之后的其他任何内容:

ls file[[:digit:]]*.txt

答案3

如果您不确定您的模式是否会包含其他文件,您可以:

  • 将它们移至另一个(临时)文件夹并mv PATTERN检查文件列表,如果一切正常,则删除临时文件夹。

  • 使用rm -i PATTERN。您必须手动确认每次删除。

  • 在执行之前,rm您可以执行ls PATTERNorecho PATTERN并检查列表是否正常。

相关内容