디렉터리 이름을 텍스트 파일의 한 줄과 비교하려고 합니다. 그러나 디렉터리 이름과 텍스트 파일의 줄이 동일하더라도 "동일"하게 만들 수는 없는 것 같습니다.
#!/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