フォルダ名をテキストファイルの行と比較する

フォルダ名をテキストファイルの行と比較する

ディレクトリ名をテキストファイルの1行と比較しようとしています。しかし、ディレクトリ名とテキストファイルの行が同じであっても「同じ」にすることはできないようです。

#!/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

それでは、少なくとも1つのゲームがあるでしょうか?しかし。私の出力は次のとおりです。

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

私はここで何が起こっているのか本当に混乱しています。コロンが最初の文字を置き換えるのはなぜですか? 2つの変数を一致させる方法は?

ベストアンサー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

おすすめ記事