여러 파일의 내용을 읽는 방법은 무엇입니까?

여러 파일의 내용을 읽는 방법은 무엇입니까?

여러 파일의 내용을 읽어야 합니다. 현재 아래 코드를 사용하여 한 파일의 내용을 읽을 수 있습니다. 이 코드는 "문자열"을 사용하여 "rules1.txt"에 있는 내용을 더 자세히 읽습니다. 동일한 기능이 필요하지만 "apps.txt"에서 여러 파일을 읽어야 합니다.

for i in $(cat apps.txt);
do    
cd /local/apps/oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/app/$i
echo $i >> /data/shellscripts/essbase/Operate/Overlays/rules1.txt     done
for i in $(ls *.rul);do
echo $i  >> /data/shellscripts/essbase/Operate/Overlays/rules1.txt      
strings $i  >> /data/shellscripts/essbase/Operate/Overlays/rules.txt

답변1

apps.txt전체 파일을 for루프 로 읽지 마십시오 . 일반적으로 파일이 큰 경우 메모리 문제가 발생할 수 있으며, apps.txt파일 이름에 공백이 있는 경우에도 문제가 발생할 수 있습니다. 출력을 반복하지 마십시오 ls. 또한 참조 변수를 확장하여 printf변수 데이터를 출력하는 데 사용됩니다.

관련된:

제안:

#!/bin/sh

appdir='/local/apps/oracle/Middleware/user_projects/epmsystem1/EssbaseServer/essbaseserver1/app'
outdir='/data/shellscripts/essbase/Operate/Overlays'

while IFS= read -r app; do
    printf '%s\n' "$app"
    for name in "$appdir/$app"/*.rul; do
        printf '%s\n' "${name##*/}"
        strings "$name"
    done
done <apps.txt >"$outdir/rules1.txt"

그러면 파일 app에서 읽고 해당 하위 디렉터리의 모든 파일에 apps.txt액세스합니다 . 문자열 합계 ( 현재 파일 의 기본 이름 )는 각 반복마다 비교됩니다 . 출력은 파일로 이동됩니다.*.rul$appdir$app${name##*/}*.rulstrings$outdir/rules1.txt

또한 (내 솔루션과 관련하여) 다음과 같습니다.

답변2

이 기사에서:https://stackoverflow.com/a/1689063/1195001

while read i  ; do
    cd /local/apps/oracle/Middleware/user_projects/epmsystem1/EssbaseServe/essbaseserver1/app/$i
    echo $i >> /data/shellscripts/essbase/Operate/Overlays/rules1.txt
done < apps.txt    

for보다 while이 이 작업에 더 적합합니다.

관련 정보