ディレクトリ名をテキストファイルの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