I generated a script that iterates through several .csv files, converting relevant files to 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
That works, but what I'd really like is to iterate through files that reside in different paths. I tried to start by setting one path (rather than defining a current directory), but I couldn't get it to work:
#!/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
What's the best way to do this by setting the path? What about handling files (same extension) that reside in different paths?
You already accepted the answer of @Charles Duffy but (if I understood well) your question is about having files in different directories so if you need to work with multiple csv files on multiple directories you can use the following snippet:
The
pathDir
variable is an array which contains the path of different directories.The first
for
loop iterate through this array to get all the paths to check.The second
for
loop as in the previous answer iterate through the files of the current tested directory.You stop the glob from being expanded when you quote it in
Instead, quote the expansion but not the glob: