如何迭代一个充满文件和目录路径的文件来检查它们是什么



我在迭代一个名为fileAndFolderPaths的文件时遇到了一个问题,在其他脚本中,我必须迭代同一个文件,并检查每一行是否是文件或文件夹路径。

文件和文件夹路径

/opt/sampleFolder
/opt/sampleFolder/aText.txt
/opt/otherFolder

然后我的脚本文件是这样的:

myScript.sh

#!/bin/bash
mapfile -t array < /tmp/fileAndFolderPaths
function checkIfFilesOrFolder(){
for i in "${array[@]}" do
if [ -f $i ]; then
echo -e "[Info] found the file: $i"
elif [ -d $i ]; then
echo -e "[Info] found the directory: $i"
else
echo -e "[Error] Nor directory or file were found based on this value: $i"
fi
done
}
checkIfFilesOrFolder
exit 0;

问题是,该检查仅适用于由mapfile命令创建的数组的最后一行。有什么想法吗?我是shell脚本的新手,所以这可能是一个非常基本的问题,但即便如此,我还是没能解决它。

如果你不介意的话,有几个复习建议:

  1. 不需要全局变量:将文件名传递给函数并在文件上循环:

    checkIfFilesOrFolder() {
    local file=$1
    while IFS= read -r line; do
    # test "$line" here ...
    done < "$file"
    }
    checkIfFilesOrFolder /tmp/fileAndFolderPaths
    

    我建议对函数变量使用local,以最大限度地减少对全局命名空间的污染。

  2. 总是引用你的变量,除非你确切地知道它们上发生了什么扩展

    if [ -f "$line" ]; then ...
    
  3. 你使用echo -e有什么原因吗?常见的建议是使用

    printf '[Info] found the file: %sn' "$line"
    

    有趣的阅读:为什么printf比回响

相关内容

  • 没有找到相关文章

最新更新