Setelah membaca jawaban atas pertanyaan yang sangat menarik ini dan melakukan beberapa percobaan dengan kartu SD untuk Android (exfat) dan sistem hiburan mobil (vfat), saya muncul menggunakan skrip bash kecil ini.
#! /bin/bash
DST=$1
# copy music to FAT media
find music/ Music/ -type f | while read f ; do
d=$DST/$( echo $f | sed 's/[^-A-Za-z0-9/._ ()]/_/g' )
echo :$d:
mkdir -p "$(dirname "$d")"
cp -n "$f" "$d"
done
Dibutuhkan tujuan (mount point) sebagai argumen dan digunakan find
untuk menemukan semua file di repositori musik saya.
Untuk setiap jalur file, ini menghitung jalur tujuan dan nama file dengan mendahului tujuan dan mengganti karakter yang menyinggung dengan garis bawah _
. Saya menggunakan daftar putih karakter (huruf, angka, -
, /
, .
,
. (
, )
Dan _
) untuk menghilangkan tanda baca yang tidak diinginkan.
Bergantung pada lokasinya, ini akan meninggalkan huruf beraksen di jalur dan nama file, yang OK untuk sistem file FAT modern, seperti yang terlihat.
Untuk setiap jalur dan nama file tujuan, direktori dibuat sesuai kebutuhan menggunakan mkdir -p
, kemudian file disalin, kecuali sudah ada.
Perhatikan kutipan "
karakter di berbagai tempat, mereka diminta untuk menjaga jalur dan nama dengan spasi di dalamnya agar tidak berantakan.