linux - 保持 *nix 格式

标签 linux bash shell vim sh

我的代码有效,但不是我想要的方式。基本上,我的代码所做的是查看当前目录、搜索文件夹,然后在这些文件夹中查看文件。如果其中一个文件扩展名是 $Example 变量的值,那么它应该删除具有相同起始文件名的所有其他文件,无论扩展名如何,并将具有 $Example 扩展名的文件重命名为相同的名称,只是没有 $示例扩展。这是代码:

#!/bin/sh
set -o errexit
Example=dummy
for d in *; do
    if test "$(ls -A "$d" 2>/dev/null)"; then
        if [ $(ls -1 ${d}/*.$Example 2>/dev/null | wc -l) -ge 1 ]; then
            cd $(pwd)/$d;
            for f in *.$Example; do
                fileName="${f%.$Example}";
                mv "$f" "${f%.$Example}";
                #tr "\r" "\n" < "${f%.$Example}" > "${f%.$Example}"
                listToDelete=$(find -name "$fileName.*");
                for g in $listToDelete; do
                    rm $g;
                done;
            done;
            cd ..;
        fi;
    fi;
done

正在使用的文件是在 VIM 中创建的,因此应该具有 Linux 格式,而不是 Windows 格式。出于某种原因,一旦扩展名被剥离,使用此代码,它会被格式化为 \r,并且文件无法运行。我在我的临时解决方案所在的位置添加了评论,但我想知道是否有某种方法可以改变 mv 函数以保持 Linux 格式,或者是否有另一种方法可以实现我想要的.谢谢

最佳答案

The files being used have been created in VIM, so are supposed to have Linux formatting, rather than Windows formatting.

这对正在使用的行分隔符没有影响。

但我可以想到 3 种不同的可能原因。

ViM 替代

\r\n可能混淆了,或者 Windows 行分隔符 ( \r\n ) 可能被错误地删除了。如果您只是想在某个时候转换 Windows 行分隔符,请使用 dos2unix 将它们转换为 Unix 行分隔文件。而不是 sedvim如果可能的话,魔法然后编辑它们。如果文件使用 ViM 添加或替换行分隔符,请记住在 ViM 中使用 \n 搜索行分隔符并替换为 \r因为 ViM 只是将文件数据加载到缓冲区中。例如%s/\n/somestring/%s/somestring/\r/g .

Cygwin

如果您使用的是 Cygwin,我很确定它默认为使用 Windows 行分隔符的 ViM,但您可以将其更改为 Unix 行分隔符。不过,我不记得如何摆脱困境了。

ViM 默认行分隔符

不确定如果您在 GNU/Linux 系统上会发生这种情况,但是可以使用 :e ++ff=unix 将 ViM 中使用的默认行分隔符指定给 Unix。

关于linux - 保持 *nix 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45042822/

相关文章:

c - C 中使用 pipe()、execlp() 和 dup() 的三重管道

python - Snakemake 将多个命令行集成在一个规则中

bash - 引用 shell 变量的打印

linux - 如何对 find 的输出执行 "for each"?

java - 编写 bash 或其他脚本以重新启动另一个脚本

java - 将FileInputStream和FileOutputStream传给ffmpeg进行转码(使用JAVE-Java音视频编码)

bash:在后台运行多个命令,将输出存储在变量中

bash - Kubernetes cron作业循环调用curl

linux - 无法从 LAN 访问 App Engine 应用程序

bash - 从 jenkins 中的 docker 容器运行命令时没有日志