【发布时间】:2015-02-26 03:53:57
【问题描述】:
我需要一种清理目录的方法,该目录由 (1) 一些工具生成的 C/C++ 内置文件(.o、.a、.EXE、.OBJ、.LIB 等)填充始终创建具有大写名称的文件,以及 (2) 始终创建小写文件名的其他工具。 (我无法控制这些工具。)
我需要通过 MinGW 'msys' bash.exe shell 脚本(或 bash 命令提示符)执行此操作。我理解管道(|),但还没有想出正确的 exec 组合。我已经成功过滤了文件名,使用如下示例的命令:
ls | grep '.\.[eE][xX][eE]'
列出在文件扩展名中具有任何大小写字母组合的所有文件——本示例获取所有可执行文件(例如“.EXE”)。
(我会为 .o、.a、.OBJ、.LIB、.lib、.MAP 等做类似的事情,它们都与 C/C++ 源文件共享同一个目录。我不想删除源文件,只删除内置文件。是的,我可能应该重新设计目录结构,为内置文件使用单独的目录[仅],但这需要时间,我需要一个快速的解决方案现在。)
我怎样才能将上述命令与其他“东西”合并(例如,像“rm -f”命令???),更进一步,实际删除[仅]那些过滤掉的文件从当前目录? (我希望有一个不需要临时文件来保存过滤后的文件名的解决方案。)
【问题讨论】:
-
find /path/to/some/directory -iname '*.exe' -delete -
我应该注意到问题描述中的一个小错误:“ls | grep '.*\.[eE][xX][eE]'” 实际上是获取 ALL 所需的命令.exe”文件名(我在正则表达式中添加了一个“*”来跟随“匹配任何字符”“。”)。 (我最初只匹配单字符文件名,例如“t.exe”。)
-
grep '.\.[eE][xX][eE]'将匹配grep '.*\.[eE][xX][eE]'匹配的任何内容。尽可能使用grep '.'in place ofgrep '..*'。