perl -pi -e 在 cygwin 上自动删除 .bak

now*_*wox 0 bash perl cygwin

在Cygwin下,perl -pi -e将始终保存.bak文件。我不太明白为什么,但我想摆脱它。

我通常这样使用 Perl 饼:

git ls-files | egrep '[.](asm|c|h|inc)' | xargs perl -pi -e 's/foo/bar/'
Run Code Online (Sandbox Code Playgroud)

然后我需要执行这个:

git ls-files | egrep '[.](asm|c|h|inc)' | sed 's/$/.bak/' | rm -f 
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个函数,但xargs不喜欢 bash 函数。有没有办法轻松地将我的两个命令组合在一起?

当然,我更愿意使用findls获取我的文件。

实际上,最适合我的解决方案是声明一个别名,perl -pi -e自动删除不需要的.bak文件。

有什么建议么?

tri*_*eee 5

您可以在xargs.

git ls-files '*.asm' '*.[ch]' '*.inc' |
xargs bash -c 'perl -pi -e "s/foo/bar/" "$@"; for f; do rm -f "$f.bak"; done' _
Run Code Online (Sandbox Code Playgroud)

另请注意我如何重构egrepgit ls-files.