微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-通过bash脚本与多个目录中的文件进行交互

生成一个脚本,该脚本可循环访问多个.csv文件,并将相关文件转换为UTF-8:

#!/bin/bash

cd /home/user/prod/
charset="text/plain; charset=iso-8859-1"

for file in *.csv; do
    if [[ $(file -i "$file") == "$file: $charset" ]]; then
        iconv -f ISO-8859-1 -t UTF-8 "$file" > "$file.new";
        mv -f "$file.new" "$file";
fi
done

那行得通,但是我真正想要的是遍历驻留在不同路径中的文件.我试图从设置一个路径开始(而不是定义当前目录),但无法使其正常工作:

#!/bin/bash

path="/home/user/prod"
charset="text/plain; charset=iso-8859-1"

for file in "$path/*.csv"; do
    if [[ $(file -i "$file") == "$file: $charset" ]]; then
        iconv -f ISO-8859-1 -t UTF-8 "$file" > "$file.new";
        mv -f "$file.new" "$file";
fi
done

设置路径的最佳方法是什么?如何处理驻留在不同路径中的文件(相同扩展名)?

解决方法:

您已经接受@Charles Duffy的答案,但是(如果我很好理解),您的问题是关于文件位于不同目录中的,因此,如果您需要在多个目录中使用多个csv文件,则可以使用以下代码段:

# array containing the different directories to work with
pathDir=("/foo/bar/dir1" "/buzz/fizz/dir2")

for dir in "${pathDir[@]}" # For each directory
do
    for file in "$dir/"*.csv; do # For each csv file of the directory

        if [[ $(file -i "$file") == "$file: $charset" ]]; then
            iconv -f ISO-8859-1 -t UTF-8 "$file" > "$file.new";
            mv -f "$file.new" "$file";
        fi

    done
done

pathDir变量是一个包含不同目录路径的数组.

一个for循环遍历此数组以获取所有要检查的路径.

如上一个答案中的第二个for循环,迭代当前测试目录的文件.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐