Bashで変数を使用して検索

Bashで変数を使用して検索

理解できない質問があります。シンプルで動作するはずですが、そうではありません。 =ターミナルで表示できる内容を編集しました=ファイル名のリストがあります。

[molni@archlinux picasa_album]$ cat LIST
IMG_9282.JPG
IMG_9287.JPG
IMG_9300.JPG
IMG_9324.JPG
IMG_9329.JPG
IMG_9463.JPG
IMG_9412.JPG
IMG_9562.JPG
IMG_9511.JPG
IMG_9607.JPG

findコマンドを使用して、リスト内のすべてのファイルとそのパスを検索しようとしています。

[molni@archlinux picasa_album]$ for i in `cat LIST`; do find /mnt/c/e-m10/  -name "$i";  done
[molni@archlinux picasa_album]$ 

結果はありません。 echo $i に置き換えると、変数 $i が正常であることを確認して動作します。

[molni@archlinux picasa_album]$ for i in `cat LIST`;do echo "$i" ;  done
IMG_9282.JPG
IMG_9287.JPG
IMG_9300.JPG
IMG_9324.JPG
IMG_9329.JPG
IMG_9463.JPG
IMG_9412.JPG
IMG_9562.JPG
IMG_9511.JPG
IMG_9607.JPG
[molni@archlinux picasa_album]$ 

これを手動で実行すると(ループなしで)変数を設定すると機能します。

[molni@archlinux picasa_album]$ i=IMG_9607.JPG
[molni@archlinux picasa_album]$ find /mnt/c/e-m10/ -name "$i"        
/mnt/c/e-m10/IMG_9607.JPG
[molni@archlinux picasa_album]$ 

私は何が間違っていましたか?

答え1

このようにして、cat -v LIST単純なエコーでは見えない特殊文字があることを確認してください。 DOS行の終わりが疑われます。つまり、改行前に追加のキャリッジリターンが発生しているようです。

編集:変換リストファイル:

dos2unix < LIST > LIST.new && mv LIST.new LIST

またはdos2unixはありませんが、vim:、vim LISTthen :set notx、thenがある場合:wq

答え2

以下はうまくいきます:

$ mkdir /tmp/test
$ cd /tmp/test
$ cat > LIST << EOD
> IMG_9324.JPG
> IMG_9329.JPG
> IMG_9463.JPG
> IMG_9412.JPG
> IMG_9562.JPG
> IMG_9511.JPG
> IMG_9607.JPG
> EOD
$ mkdir e
$ touch e/IMG_9607.JPG
$ touch e/IMG_9412.JPG
$ find .
.
./e
./e/IMG_9412.JPG
./e/IMG_9607.JPG
./LIST
$ for i in `cat LIST`; do find e/  -name "$i";  done
e/IMG_9412.JPG
e/IMG_9607.JPG
$ 

したがって、上から始めてLISTをrealに変えてからe/。 forループの内部Bash制限に達していない場合(エラーが発生する必要がある場合)、出力例にない他の誤った操作を実行しています。

答え3

Cloud /mnt/c/e-m10/フォルダにリストされているサンプルファイルを提供しましたか?

その間、次のコマンドを試すことはできますか?

for i in `cat LIST`; do echo $i; find /mnt/c/e-m10/  -iname $i -print;  done

また、必要に応じてすべての情報を印刷し、大文字と小文字を無視します。

関連情報