我有文件文件名_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
因此在这种情况下您会删除想要保留的文件而留下应该删除的文件。