이해가 안 되는 질문이 있습니다. 간단하고 작동해야 하지만 그렇지 않습니다. =터미널에서 볼 수 있는 내용을 편집했습니다=파일 이름 목록이 있습니다:
[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 LIST
then :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
또한 필요에 따라 모든 정보를 인쇄하고 대소문자도 무시합니다.