私はmingwを使用しています。
$ sed -i "s/a/b/" test.txt
sed: preserving permissions for `./sed003480': Permission denied
現在のディレクトリのファイルをtouch/rmできます。
Windowsのセキュリティ設定が原因です。
コンテキストメニューからフォルダのプロパティ設定を開きます。 (セキュリティ)タブで、編集をクリックし、追加...を押しますポップアップウィンドウでユーザーをリストに追加し、Allow列でフルコントロールを確認します。 [〜#〜] ok [〜#〜]を2回押して変更を適用します。
私にとって、フォルダは読み取り専用でした。読み取り専用オプションのチェックを外すと問題が解決します。 Zenadixのコメントのおかげで
Windows 10 WSLで同様の問題が発生しました。この問題は、VSコードが開いていて、明らかにファイルを使用していることが原因でした。 VSコードを閉じると問題が解決しました。
TL; DR:使用済みSudo
私の場合、次のようにLinux(WSL)のWindowsサブシステムで実行されているbashスクリプトを実行していました。
./generate.sh
スクリプトは一連のファイルを作成しましたが、不明な理由により、sedは何らかの理由でこれらのファイルの権限を変更する権限を拒否されました。
実際のsedコマンドは、次のような検索置換を実行するために使用されました。
grep -rl $PATTERN $PUBLIC_API_FOLDER/ \
| xargs sed -i 's/$PATTERN/$REPLACE/g'
ご覧のとおり、どの時点でも特権が昇格されていないにもかかわらず、スクリプトが作成したファイルを変更することはできませんでした。
sed: preserving permissions for ‘public_api/models/sedt0qk4D’: Operation not permitted
sed: preserving permissions for ‘public_api/models/sedOxoc1O’: Operation not permitted
sed: cannot rename public_api/models/sedOxoc1O: Permission denied
sed: preserving permissions for ‘public_api/controllers/sedx5BafW’: Operation not permitted
sed: preserving permissions for ‘public_api/models/sedVkdqzc’: Operation not permitted
sed: preserving permissions for ‘public_api/models/sedLvyS3s’: Operation not permitted
sed: cannot rename public_api/models/sedLvyS3s: Permission denied
sed: preserving permissions for ‘public_api/controllers/sedE7GSe8’: Operation not permitted
sed: cannot rename public_api/controllers/sedE7GSe8: Permission denied
sed: preserving permissions for ‘public_api/controllers/sednHZBQf’: Operation not permitted
sed: cannot rename public_api/controllers/sednHZBQf: Permission denied
私の場合の解決策は、単にSudoでスクリプトを実行することでした。
Sudo ./generate.sh