删除目录中一定数量的具有字符序列的文件
Remove a certain amount of files with a sequence of characters in a directory
我停止了一个进程来排除故障。现在,我想从它在 CentOS 6.4 中停止的地方开始这个过程。
我停止的这个脚本循环运行一个 perl 脚本来处理 /dev/shm/split/ 中的所有文件。这些文件从一个较大的文件中分成许多部分。它们的命名方式示例如下:
file.txt.aa
file.txt.ab
file.txt.ac
...等等。
我发现脚本在 file.txt.fy 处停止。所以,我想删除 /dev/shm/split/ 中从 file.txt.aa 到 file.txt.fy 的所有文件。
我尝试通过以下方式为 rm 命令创建白名单:
ls /dev/shm/split/ > whitelist
cat whitelist | egrep -v 'file.txt.[aa-fz]' | tee whitelist.tmp
这没有达到我的预期。
请帮帮我!谢谢!
你的命令的问题是你不能用 bash 中的方括号模式匹配两个字符。您应该改用类似的东西:
ls file.txt.[a-e]? file.txt.f[a-y]
基本上把你的范围分解成两个范围,第一个会匹配.aa
到.ez
,第二个会匹配.fa
到.fy
(包含)。
请注意,我在这里使用了 ls
命令。当您执行的操作可能具有破坏性时,我总是发现首先回显或 ls 您将要 运行 的 commands/files 是个好主意。当您确定它产生正确的输出时,继续并使用 rm
而不是 ls
.
我停止了一个进程来排除故障。现在,我想从它在 CentOS 6.4 中停止的地方开始这个过程。
我停止的这个脚本循环运行一个 perl 脚本来处理 /dev/shm/split/ 中的所有文件。这些文件从一个较大的文件中分成许多部分。它们的命名方式示例如下:
file.txt.aa
file.txt.ab
file.txt.ac
...等等。
我发现脚本在 file.txt.fy 处停止。所以,我想删除 /dev/shm/split/ 中从 file.txt.aa 到 file.txt.fy 的所有文件。
我尝试通过以下方式为 rm 命令创建白名单:
ls /dev/shm/split/ > whitelist
cat whitelist | egrep -v 'file.txt.[aa-fz]' | tee whitelist.tmp
这没有达到我的预期。
请帮帮我!谢谢!
你的命令的问题是你不能用 bash 中的方括号模式匹配两个字符。您应该改用类似的东西:
ls file.txt.[a-e]? file.txt.f[a-y]
基本上把你的范围分解成两个范围,第一个会匹配.aa
到.ez
,第二个会匹配.fa
到.fy
(包含)。
请注意,我在这里使用了 ls
命令。当您执行的操作可能具有破坏性时,我总是发现首先回显或 ls 您将要 运行 的 commands/files 是个好主意。当您确定它产生正确的输出时,继续并使用 rm
而不是 ls
.