我正在尝试(递归地)删除目录中名称包含字符串的所有文件。最终我想这样做:
find . -type f -name '*.m3d*' -delete
但在运行删除之前,我测试了是否找到了所有具有以下内容的文件:
find . -type f -name '*.m3d*'
但这会返回一个不完整的列表:
./Result/h-field (f=15)_1,1.m3d
./Result/e-field (f=15)_1,1.m3d
./Result/h-field (f=15)_2,1.m3d
./Result/e-field (f=15)_2,1.m3d
完整列表可以通过以下方式查看:
find . | grep m3d
./Result/e-field (f=15)_1,1_m3d.rex
./Result/h-field (f=15)_1,1.m3d
./Result/e-field (f=15)_1,1.m3d
./Result/h-field (f=15)_2,1_m3d.rex
./Result/e-field (f=15)_2,1_m3d.rex
./Result/h-field (f=15)_2,1.m3d
./Result/e-field (f=15)_2,1.m3d
我阅读了 find 的手册页,它说不能像我在最初的尝试中那样在字符串末尾使用通配符。删除包含我的字符串但不一定位于名称末尾的所有文件的好方法是什么?
答案1
我不确定find
您当前使用的是什么版本,但我找不到任何关于通配符在字符串末尾不起作用的参考。
您的问题似乎是文件的命名方式。搜索中未显示的文件不匹配,因为它们在字符串前*.m3d*
没有点 ( ) ,而是下划线 ( ),因此不会将它们与给定条件匹配。.
m3d
_
find
该命令find . -type f -name '*m3d*'
应该能够从给定示例中找到所有这些文件。