폴더 이름을 텍스트 파일의 줄과 비교

폴더 이름을 텍스트 파일의 줄과 비교

디렉터리 이름을 텍스트 파일의 한 줄과 비교하려고 합니다. 그러나 디렉터리 이름과 텍스트 파일의 줄이 동일하더라도 "동일"하게 만들 수는 없는 것 같습니다.

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

관련 정보