Cygwin bash sed 锁定我的文件

12 windows cygwin bash sed

当我使用 sed 命令更改 cygwin bash 中的文件时,文件被锁定。

复制:

  1. 打开cmdcd转到非用户目录(fe temp)
  2. echo aaa > test.txt
  3. 在文本编辑器中打开,添加行,尝试保存 => 有效
  4. %CYGWIN_HOME%\bin\bash -c "sed -i 's/aaa/bbb/' test.txt
  5. 在文本编辑器中,添加另一行并尝试保存 =>“拒绝访问”

跆拳道?!如何在不锁定的情况下 sed 文件,或之后释放文件句柄?

  • Windows 安全权限似乎完全被写入文件:

    之前的权限:

    之前的权限(图片!)

    之后的权限:

    之后的权限(图片!)

  • 但是它在用户目录 ( Desktop) 中有效

  • 我用 LockHunter 检查了文件,但似乎没有进程锁定文件
  • Cygwin FAQ提到了对某些程序的干扰。它尝试卸载 Antivir 和 Catalyst 并重新启动。
  • 尝试UnxTools(崩溃)、GnuWin32(sed 不支持就地替换)、Interex(安装程序不支持 W7 Pro)...... * 叹气 *

小智 8

对应Cygwin Mailinglist,使用noacl挂载

$ mount -o binary,posix=0,user,noacl C:/tmp /mnt/tmp
Run Code Online (Sandbox Code Playgroud)

../cygwin/fstab在启动 Cygwin bash 之前直接在 Windows 中

C:/tmp /mnt/tmp ntfs binary,posix=0,user,noacl 0 0
Run Code Online (Sandbox Code Playgroud)


小智 5

在 cygwin 下使用 find 与 grep 和 sed 结合使用自动处理一个充满 Java 源代码文件的文件夹后,我遇到了完全相同的问题。sed 搞乱了我的文件的 NTFS 文件权限,在重新启动后仍然存在,所以我寻找一种简单的方法来解决这个问题。

我实际上找到了一种将文件权限恢复为旧值的简单方法。它可以递归地对整个文件夹完成,这对我来说很重要,因为我一次修改了这么多文件(数百个)。遗憾的是,我只知道菜单项的德语名称,所以我不确定菜单项(在 Windows 资源管理器中)是如何以正确的英语调用的。

在德语中,您可以:右键单击我使用 sed 的文件夹的父文件夹、“Eigenschaften”(上下文菜单)、“Sicherheit”(对话框中的选项卡)、“Erweitert”(按钮)、“Berechtigungen ändern... "(带有 UAC 提示的按钮),现在我只选中两个复选框(上面的一个已经设置,但下面的不是,但必须)。现在我单击“确定”三下。

这样做的实际更改是较低的复选框强制 Windows 以递归方式替换文件夹内容的当前权限为您右键单击的文件夹的权限,因此所有损坏的权限都得到修复。对我来说就像一个魅力,而且速度也非常快(很多文件只需几秒钟)。

可能的翻译(由我猜测):

  • “特征”->“属性”
  • “安全”->“安全”
  • “Erweitert”->“高级”
  • "Berechtigungen ändern..." -> "更改权限..."