我有很多 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 PATTERN
orecho PATTERN
并检查列表是否正常。