删除指定目录下2020*.js文件并显示内容:我的命令为何无效?
问题分析与解决方法
原命令的问题点
-name参数误用:find的-name仅匹配文件名,你把完整路径写在-name里,导致find找不到任何符合条件的文件。正确姿势是先指定搜索目录,再用-name匹配文件名。- 删除指令被注释:你用
#把-delete注释掉了,这行等于无效,自然不会执行删除操作。 - xargs无有效操作:管道到
xargs后没有指定要执行的命令,xargs不知道该处理什么,所以没有任何输出。 - 逻辑冲突:即使去掉注释,
find的-delete选项会让它不输出文件名到标准输出,管道后的命令拿不到内容,也没法显示文件内容。
正确的实现命令
方法一:逐个文件显示内容再删除
find server/db/migrations/ -name '2020*.js' -exec cat {} \; -exec rm {} \;
-exec cat {} \;会先打印每个匹配文件的内容,-exec rm {} \;再执行删除,两者按顺序逐个处理文件。
方法二:用xargs批量处理
find server/db/migrations/ -name '2020*.js' | xargs -I {} sh -c 'cat {}; rm {}'
xargs将每个匹配的文件名传递给shell命令,先执行cat显示内容,再执行rm删除文件。
安全提示
如果怕误删,可以先把rm换成echo rm,确认要删除的文件列表是否正确,没问题再替换回rm。
内容的提问来源于stack exchange,提问作者pmiranda
相关产品推荐
相关产品推荐

