将文件夹名称与文本文件中的行进行比较

将文件夹名称与文本文件中的行进行比较

我试图将目录名称与文本文件中的一行进行比较。然而,即使目录的名称和文本文件中的行相同,我似乎也无法让它们“相等”。

#!/bin/bash
for dir in /mnt/hgfs/VM/Command_for_Dozing_Logs/*/
do
    dir=${dir%*/}
    dir=${dir:(-10)}
    echo "Dir:$dir:"

    while read p; do
        echo "File:$p:"     
        if [ "$dir" == "$p" ]
        then
            echo "Variables are equal!"
        fi

    done </mnt/hgfs/VM/copiedFolders.txt
done

我尝试匹配的文件夹位于Command_for_Dozing_Logs文件夹。里面的文件夹是:

2015.07.07
2015.07.08

我的文本文件是这样的:

2015.07.08
2015.05.23

所以应该至少有一场比赛,对吧?但不是。我将其作为我的输出:

Dir:2015.07.07:
:ile:2015.07.08
:ile:2015.05.23
Dir:2015.07.08:
:ile:2015.07.08
:ile:2015.05.23

我真的很困惑这里发生了什么。为什么那个冒号会取代第一个字母?如何使两个变量匹配?

答案1

其原因(几乎可以肯定)是因为CR文件中每一行的末尾都有一个字符。这是在 Windows 和 Mac 系统上创建的文件的典型情况;基于 Linux/Unix 的系统用作NL行结束符。

您可以使用此命令修复您的文件,从而允许您使用/tmp/fixed_copiedFolders.txt而不是原始文件。

tr -d '\015' < /mnt/hgfs/VM/copiedFolders.txt > /tmp/fixed_copiedFolders.txt

或者,您可以将其直接合并到您的脚本中:

#!/bin/bash
for dir in /mnt/hgfs/VM/Command_for_Dozing_Logs/*/
do
    dir=${dir%*/}
    dir=${dir:(-10)}
    echo "Dir:$dir:"

    tr -d '\015' </mnt/hgfs/VM/copiedFolders.txt |
        while read p; do
            echo "File:$p:"     
            if [ "$dir" == "$p" ]
            then
                echo "Variables are equal!"
            fi
        done
done

相关内容