Για τις ανάγκες ενός έργου, χρειάστηκε να γίνει μαζική επεξεργασία αρχείων που είχαν προέλθει από μεταφορά από ένα Windows σύστημα σε ένα Linux. Εδώ υπάρχει μια σημαντική διαφορά: το σύστημα αρχείων του Linux είναι case sensitive ενώ των Windows όχι, με αποτέλεσμα μεταδεδομένα (metadata) που προσδιορίζουν την τοποθεσία των αρχείων να μην είναι πια έγκυρα. Ένα script για την κανονικοποίηση των διαδρομών και των ονομάτων αρχείων στο Linux, ώστε όλα να είναι πεζά (lowercase) ακολουθεί. Σε πρώτο πέρασμα, επαναληπτικά, διορθώνονται τα ονόματα των καταλόγων (directories) Σε δεύτερο πέρασμα, διορθώνονται και τα ονόματα των αρχείων.
#!/bin/bash
# Lowercase recursively directories and files.
FILE_LOG=/tmp/massrename_$$.log
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
echo "Start" > "$FILE_LOG"
# Recursively lowercase directories.
while [ -s "$FILE_LOG" ];do
cat /dev/null > "$FILE_LOG"
find . -print0 -type d |while read -d $'\0' f; do mv -v "$f" "`echo $f |tr '[:upper:]' '[:lower:]'`" 2> /dev/null 1>> "$FILE_LOG"; done
done
# Lowercase files.
find . -print0 -type f|while read -d $'\0' f; do mv "$f" "`echo $f |tr '[:upper:]' '[:lower:]'`" 2> /dev/null; done
IFS=$SAVEIFS
No comments:
Post a Comment