하위 폴더 쉘 스크립트에서 특정 확장자를 가진 파일을 반복합니다.

하위 폴더 쉘 스크립트에서 특정 확장자를 가진 파일을 반복합니다.

내 Mac에는 현재 위치의 하위 폴더에 있는 txt 파일을 반복하려고 하는 스크립트가 있습니다. 이것은 myscript.sh:

cd /Users/Desktop/
for entry in $(pwd)/txt/*.txt 
do 
echo $entry
done

*txt/Users/Desktop/txt/*.txt이는 .txt 파일을 반복하려는 것처럼 그 안에 포함된 경로 문자열을 인쇄하므로 echo $entrytxt 파일의 이름을 인쇄할 것으로 예상했지만 대신 인쇄됩니다./Users/Desktop/txt/*.txt

답변1

파일 이름과 일치하지 않는 globbing 패턴을 셸에 제공하면 globbing 패턴이 확장되지 않습니다. 귀하의 경우 이는 echo출력 패턴 자체를 반복하는 것을 의미합니다.

스크립트의 대체 구현:

cd /Users/Desktop || exit 1

for entry in txt/*.txt; do 
    test -e "$entry" && echo "$entry"
done

실패하면 이 구현은 0이 아닌 종료 코드로 종료됩니다 cd. 그러면 그럴 것이다아니요pwd필요가 없기 때문에 사용됩니다 . 패턴과 일치하는 이름 목록을 얻고 이름을 반복합니다. 각 반복에서 해당 이름을 표준 출력으로 인쇄하기 전에 해당 이름을 가진 항목이 파일 시스템에 실제로 존재하는지 확인하기 위해 테스트합니다.

echolop 내부의 출력 파일에 대한 전체 경로를 원할 경우 lop 을 사용 echo "/Users/Desktop/$entry"하거나 더 나은 방법을 사용하십시오.

dir="/Users/Desktop"
cd "$dir" || exit 1

for entry in txt/*.txt; do 
    test -e "$entry" && printf '%s/%s\n' "$dir" "$entry"
done

관련 정보