如何将两条清理Python缓存的find命令合并为单条命令?
可以合并成单条
find命令! 当然没问题,我们可以利用find的逻辑或(-o)和条件分组特性,把两条命令合并成一条,同时保证功能和效率和原来的两条命令一致。
合并后的完整命令:
find . \( -type f -name "*.py[c|o]" \) -o \( -type d -name "__pycache__" \) -exec rm -rf {} +
命令拆解说明:
\( ... \)分组条件:因为-o的优先级低于-exec,必须用括号把两组条件分别包裹,否则-exec只会作用于最后一个条件(也就是只删除__pycache__目录)。括号前的反斜杠是用来转义,避免被Shell解析成子命令。-type f -name "*.py[c|o]":和你原来的第一条命令一致,匹配当前目录及子目录下所有.pyc或.pyo格式的文件。-o:逻辑“或”运算符,表示满足前面的文件条件或者后面的目录条件,都需要被处理。-type d -name "__pycache__":对应你原来的第二条命令,匹配所有__pycache__目录。-exec rm -rf {} +:对所有匹配到的文件/目录执行删除操作。-r确保能递归删除目录(如果用原来的rm -f删目录会报错),-f强制删除且不弹出确认提示;{} +会把所有匹配的路径一次性传给rm,比{} \;逐个传递更高效。
安全提示:
在执行删除命令前,建议先把rm -rf换成ls -l,预览一下要删除的内容,避免误删重要文件:
find . \( -type f -name "*.py[c|o]" \) -o \( -type d -name "__pycache__" \) -exec ls -l {} +
确认列表里都是你想清理的Python缓存后,再替换回rm -rf执行即可。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

