쉘 스크립트를 사용하려면 텍스트 파일의 각 줄에 대한 절대 경로가 필요합니다.

쉘 스크립트를 사용하려면 텍스트 파일의 각 줄에 대한 절대 경로가 필요합니다.

.XML 파일 목록이 포함된 텍스트 파일이 있습니다.

파일에 있는 각 XML의 절대 경로가 필요합니다.

다음 쉘 스크립트를 시도했지만 여러 번 시도한 후에도 do 태그 내에서 find 명령이 작동하지 않습니다.

    #!/bin/sh
    NAMES=`cat list2.txt`
    for NAME in $NAMES; 
   do
     echo "$NAME"
     find $PWD -type f -name "$NAME"
   done

답변1

루프는 문제를 해결하는 잘못된 방법입니다. 각 파일에 대한 디렉터리 트리를 크롤링하는 것은 비효율적입니다. 모든 파일을 보관하려면 디렉터리를 한 번만 크롤링해야 합니다. 좋다:

find "$PWD" -type f -print0 | awk -F / '
   !list_processed {names[$0]; next}
   $NF in names' list.txt RS='\0' list_processed=1 -

list.txt경로가 아닌 파일 이름 목록이 한 줄에 하나씩 포함되어 있다고 가정합니다 .

답변2

코드에 문제가 있습니다. 반복이 잘못되었습니다.

나는 이것을 이런 식으로 사용할 것입니다 :

#!/bin/sh
while IFS= read -r NAME; do
  echo "$NAME"
  find "$PWD" -type f -name "$NAME"
done <list.txt

답변3

변수가 PWD정의되지 않았습니다.
루프가 시작되기 전에 추가하세요.
PWD=<path>

답변4

귀하의 모든 응답에 감사드립니다.
문제 해결됨. :)
제가 전달한 텍스트 파일에 문제가 있을 수 있습니다. 방금 새 텍스트 파일을 만들고 모든 데이터를 여기에 복사했습니다.

for 루프에 이 새 파일을 전달하면 다음과 같이 내 코드 자체에서 잘 작동합니다.

#!/bin/sh
NAMES=`cat myNewList.txt`
for NAME in $NAMES; 
 do
  find $PWD -type f -name "$NAME"
 done

관련 정보