在命令行中删除特定文件

在命令行中删除特定文件

我有文件文件名_1文件名_2...文件名_100000其中文件名按顺序编号。我如何删除索引大于的文件,比如100

答案1

如果文件名按顺序编号,只需运行以下命令:

rm fileName_{100..100000}

答案2

您也可以尝试这个命令,

for i in $(seq 100 100000); do rm fileName_$i; done

如果文件名包含连续的数字,它将删除所有文件(范围从 100 到 100000)。

答案3

一般来说,有几种方法可以实现这一点:

rm fileName_{100..100000}

将被 shell 扩展为大约 100,000 个文件名。如果基本名称是一条长路径,并且数量足够多,则使用此方法实际上可能会超出命令行的最大长度。

循环for

for i in $(seq 100 100000); do rm fileName_$i; done

不会出现此问题,但是一种相对较慢的删除文件的方式,因为 shell 必须执行变量替换并启动 rm 大约 100,000 次。

如果某些文件filename_101丢失,上述两种方法都可能引发警告。

通常,基于的解决方案find更好,因为它们只对实际存在的文件起作用(在发现期间)。但是,存在一些细微的差异:

find . -name 'fileName_[100-100000]' -exec rm {} \;

仍将启动rm程序约 100,000 次,而用 替换最后\;一个+将尝试最小化子进程数。这两种方法可能都比使用 慢(或多或少),-delete后者根本不使用外部命令,而是调用系统调用。

然而,总是首先检查该模式是否真正匹配您想要定位的文件:

stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]' 
askubuntu/filename_1

因此在这种情况下您会删除想要保留的文件而留下应该删除的文件。

答案4

使用以下命令:

find . -name 'fileName_[100-100000]' -exec rm {} \;

这将删除 100 到 100000 个文件。

更多信息:地点

相关内容