假设我有以下文件:
foo.coffee
foo.js
bar.js
Run Code Online (Sandbox Code Playgroud)
rm *.js如果有相应的.coffee文件,是否有一种简单的方法?在示例中,这样的命令将删除foo.js离开:
foo.coffee
bar.js
Run Code Online (Sandbox Code Playgroud)
我正在寻找某种rm包装,因为我需要执行递归rm -r.
一点点bash(使用所有最佳实践!):
shopt -s nullglob
for f in *.js; do
coffee=${f%.js}.coffee
[[ -f $coffee ]] && rm -v -- "$f"
done
Run Code Online (Sandbox Code Playgroud)
nullglob是shell 可选行为,因此*.js如果没有扩展名为js..js并.coffee在变量中替换它coffee。rm与-v开关(详细)一起使用,以便您了解正在发生的事情。rm也用于--标记选项的结束,以防万一有一个以连字符开头的文件:在这种情况下,rm会混淆并尝试解释选项。[[ ... ]]构造是条件构造并使用条件表达式。请注意,我使用的是强大的双方括号 [[而不是单个[. 非常好的实践(在bash 中)。出于测试目的,你应该把echo在眼前rm:
[[ -f $coffee ]] && echo rm -v -- "$f"
Run Code Online (Sandbox Code Playgroud)
以便它只回显命令而不删除任何内容。如果您对此感到满意,请删除echo.
享受!