如何读取多个文件的内容?

如何读取多个文件的内容?

我需要读取多个文件的内容,目前我可以使用下面的代码读取一个文件的内容,此代码使用“strings”进一步读取“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##*/}(当前*.rul文件的基本名称)将在每次迭代中与strings.输出将转到$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    

While 比 for 更适合这项任务。

相关内容