2016-10-13 14 views
1

ファイルのリストが含まれているファイルがあります。これらのファイルが存在するかどうかを知りたいと思っています。Bash - ファイルが存在しない

while read line; do 
    filename="$(echo $line | cut -d';' -f4)"; 
    if [ ! -e "/some/path/$filename" ]; 
    then echo "/some/path/$filename"; 
    fi ; 
done < "../my_list_of_file" 

このコマンドは私に非existant、元のように記載されているすべてのファイルを返す:

/some/path/my_listed_file.jpg 

をしかし、私はls /some/path/my_listed_file.jpgを行うとき、私は、ファイルが存在していることを見ることができる私は、このコマンドを使用していました。私の命令で何が間違っていますか?

+4

これは行の最後のフィールドですか?私はあなたのファイルがWindowsで作成されたので、 'CRLF'行の終わりがあると思います。 – Barmar

+1

'filename'が各行の最後のフィールドである場合、これはDOSの行末を持つ' my_list_of_file'を指します。ファイル名は実際には改行で終わります。 – chepner

+0

これが問題であれば、 'dos2unix'を使ってファイルを修正してください。 – Barmar

答えて

1

Barmarさんとchepnerさんにありがとうございました。問題はファイルの最後にCRLFでした。 ここに作業コマンドがあります:

while IFS=$';\r' read -r _ _ _ filename _; do 
    if [ ! -e "/some/path/$filename" ]; 
    then echo "/some/path/$filename"; 
    fi ; 
done < "../my_list_of_file" 
関連する問題