因此,我遇到了一个问题,传输到 Solaris 服务器的文件自动到达时,末尾带有 Windows 行结尾
^M
。
通常我使用以下命令修复此问题:
find . -type f -exec dos2unix {} {} \;
它效果很好,可以删除所有文件的所有行末尾的所有 ^M。
问题是它也会触及文件,这意味着当我运行命令时,时间戳全部更改为同一时刻,从而破坏了文件的真实时间戳。
我知道
cp
的 -p 选项,但我不确定如何使用 dos2unix 或 find 保留时间戳。 我还有太多文件需要使用 touch
来修复它们。
如何在不更改时间戳的情况下删除所有文件行尾的 ^M?
正如评论中提到的,检查你的客户端是否支持换行符转换,否则,你可以这样做(将其命名为
preserve-mtime
或类似)
#! /bin/bash
f=$1
t=$(stat -c %y "$f")
dos2unix "$f" "$f"
touch -m --date="$t" "$f"
这会重置修改时间(假设您在
touch
中有该选项)并像以前一样从find
调用它
find . -type f -exec /path/to/preserve-mtime {} \;