Sau khi đọc câu trả lời cho câu hỏi rất thú vị này và thực hiện một số thử nghiệm với thẻ SD cho Android (exfat) và hệ thống giải trí xe hơi (vfat), tôi đã nghĩ ra kịch bản bash nhỏ này.
#! /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
Nó lấy đích (điểm gắn kết) làm đối số và sử dụng find
để định vị tất cả các tệp trong kho nhạc của tôi.
Đối với mỗi đường dẫn tệp, nó sẽ tính toán một đường dẫn đích và tên tệp bằng cách thêm vào đích và thay thế bất kỳ ký tự vi phạm nào bằng dấu gạch dưới _
. Tôi sử dụng một danh sách trắng của ký tự (chữ, số, -
, /
, .
,
. (
, )
Và _
) để loại bỏ bất kỳ dấu chấm câu không mong muốn.
Tùy thuộc vào miền địa phương, điều này sẽ để lại các chữ cái có dấu trong đường dẫn và tên tệp, điều này phù hợp với các hệ thống tệp FAT hiện đại, như có vẻ như vậy.
Đối với mỗi đường dẫn và tên tệp đích, các thư mục được tạo khi cần sử dụng mkdir -p
, sau đó tệp được sao chép, trừ khi nó đã tồn tại.
Lưu ý các "
ký tự trích dẫn ở nhiều nơi khác nhau, chúng được yêu cầu giữ cho các đường dẫn và tên có không gian trong đó không bị phá vỡ.