我有文件fileName_1、fileName_2 ... fileName_100000,其中文件名按顺序编号。如何删除索引大于100的文件?
cio*_*y23 17
如果文件名按顺序编号,只需运行以下命令:
rm fileName_{100..100000}
Run Code Online (Sandbox Code Playgroud)
你也可以试试这个命令,
for i in $(seq 100 100000); do rm fileName_$i; done
Run Code Online (Sandbox Code Playgroud)
如果文件名包含按顺序排列的数字,它将删除所有文件(范围从 100 到 100000)。
小智 5
一般来说,您有几种方法可以实现这一目标:
rm fileName_{100..100000}
Run Code Online (Sandbox Code Playgroud)
将被 shell 扩展为大约 100,000 个文件名。如果 basename 是一条长路径并且数量足够大,则您实际上可能会超过使用此方法的命令行的最大长度。
该for环
for i in $(seq 100 100000); do rm fileName_$i; done
Run Code Online (Sandbox Code Playgroud)
不会遇到这个问题,但是删除文件的方法相对较慢,因为 shell 必须执行变量替换并启动 rm 大约 100,000 次。
如果某些文件filename_101丢失,则上述两种方法都可能导致警告。
通常,基于 的解决方案find更好,因为它们仅适用于实际存在的文件(在发现期间)。但是,有一些细微的区别:
find . -name 'fileName_[100-100000]' -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)
仍将启动该rm程序约 100,000 次,同时替换最终的\;by+将尝试最小化子进程的数量。这两种方法都可能(或多或少)比使用-delete根本不使用外部命令而是调用系统调用的方法慢。
但是,请始终首先检查模式是否确实与您要定位的文件匹配:
stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]'
askubuntu/filename_1
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,您将删除要保留的文件并保留本应删除的文件。