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

또한 필요에 따라 모든 정보를 인쇄하고 대소문자도 무시합니다.

관련 정보