String

將文件夾名稱與文本文件中的行進行比較

  • July 14, 2015

我正在嘗試將目錄名稱與文本文件中的一行進行比較。然而,即使目錄名稱和文本文件中的行相同,我似乎也無法讓它們“相等”。

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

我真的很困惑這裡發生了什麼。為什麼那個冒號會替換第一個字母?如何讓兩個變數匹配?

原因是(幾乎可以肯定)因為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

引用自:https://unix.stackexchange.com/questions/215917