我需要替换位于 CIFS 安装 (NTFS NAS) 中的文件中的字符串。它安装有
sudo mount -t cifs -o rw,guest,vers=1.0 //192.168.1.1/hdd /hdd
直到一周前我才遇到这个问题,但我没有更改任何安装选项
如果我跑sed -i 's/oldstring/newstring/' /hdd/file
我会得到
sed: preserving permissions for ‘/hdd/sedgtQccm’: Not a directory
sed: cannot rename /hdd/sedgtQccm: File exists
如果我跑sed 's/oldstring/newstring/' /hdd/file > /hdd/file.tmp && mv /hdd/file.tmp /hdd/file
我会得到
mv: cannot move '/hdd/file.tmp' to '/hdd/file': File exists
如果我跑步 sed 's/oldstring/newstring/' /hdd/file > /hdd/file.tmp && rsync /hdd/file.tmp /hdd/file
我会得到
rsync: [receiver] rename "/hdd/file.tmp.GMn4i1" -> "file": File exists (17)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1287) [sender=3.2.2]
如果我收到这些错误
- 这两个文件都是远程的
- file 是远程的,file.tmp 是本地的
我不明白如果
- 两个文件都是本地的
- file 是本地的,file.tmp 是远程的
还值得一提的是,如果我下载一个大文件,我会得到
write /hdd/largefilefromweb: interrupted system call
如果我几乎每小时播放我的音乐,我就会得到
Encountered error while transfering /hdd/track.mp3: Read error: Interrupted system call
编辑: 的解决方法是在sed
执行第二个命令之前处理该文件:mv
rsync
rm
sed 's/oldstring/newstring/' /hdd/file > /hdd/file.tmp && rm /hdd/file && mv /hdd/file.tmp /hdd/file
# instead of
sed 's/oldstring/newstring/' /hdd/file > /hdd/file.tmp && mv /hdd/file.tmp /hdd/file
答案1
关于“文件存在”问题,如这个服务器故障问题,我相信这是最近内核的回归,并降级以5.7.7
避免目前的问题。