Kết nối các tệp có ký tự đặc biệt vào USB FAT32


8

Tôi muốn sao chép một số lượng lớn tệp vào ổ USB được định dạng FAT32 (và không thể định dạng bất cứ thứ gì khác, thật không may).

Nhiều tệp trong số này có tên với các ký tự như :?FAT32 không cho phép. Cố gắng sử dụng cphoặc rsync, các tệp này không được sao chép và một lỗi được báo cáo cho biết như vậy.

Tôi không muốn đổi tên các tệp tại nguồn, nhưng tôi cũng không quan tâm các tệp được đổi tên thành gì trên ổ USB đích.

Làm rõ về mục đích (cũng áp dụng cho các bình luận khác): Đây là phần dành cho máy nghe nhạc mp3 trong xe hơi và phần mềm chỉ cho phép FAT32. Vì vậy, nó không dành cho mục đích sao lưu. Và lý do tên tập tin có các ký tự lạ là vì chúng, ví dụ như các tiêu đề của mp3, hoặc tên của các nghệ sĩ.

Tôi đã thử một vài điều:

  1. --iconvtùy chọn của rsync . Điều này dường như không hoạt động nhưng có lẽ tôi đã không sử dụng nó một cách chính xác.
  2. rdiff-backup, mà tôi đọc thực hiện chuyển đổi này theo mặc định. Tuy nhiên, các tệp nguồn là các liên kết tượng trưng mà tôi muốn theo dõi (tức là -Ltùy chọn của rsync ) và từ các trang này dường như không rdiff-backupcó tùy chọn này.

Bất cứ một đề nghị nào khác?


Trước hết, tại sao bạn không thể định dạng lại ổ USB và tại sao bạn có tên tệp có dấu hai chấm và dấu hỏi trong đó? Mặc dù các ký tự này được hệ thống tập tin cho phép trên ổ đĩa nguồn, chúng có xu hướng gặp vấn đề đối với công việc shell và tính di động. Ngoài ra, rsync's --iconvtùy chọn không được thực hiện cho những gì bạn đang cố gắng sử dụng nó cho.
depquid

1
@depquid đó chỉ là vấn đề đối với công việc shell nếu bạn viết mã shell buggy.
jordanm

@jordanm Tôi đã suy nghĩ nhiều hơn về việc sử dụng shell tương tác. Chắc chắn nó có thể được thực hiện, nhưng làm việc với các ký tự chuẩn hơn sẽ thuận tiện hơn, IMHO.
depquid

1
FYI, --iconvcó đặt ký tự chuyển đổi, ví dụ: latin1 <-> utf8. Không phải những gì bạn đang tìm kiếm.
derobert

Câu trả lời:


4

Rsync với --iconvsẽ là một lựa chọn, nhưng bạn cần đầu tiên để xác định một mã hóa nơi ?, :và những người khác được mã hóa với các nhân vật được phép vào hệ thống tập tin FAT.

Đối với trường hợp sử dụng của bạn, bạn không sử dụng tất cả sức mạnh của rsync cho việc này. Nhiệm vụ này có thể được thực hiện trong một vài dòng script shell.

Đây là một tập lệnh bash sao chép ~/Musicvào /media/usb99, bỏ qua các tệp cũ hơn trên mục tiêu, chuyển đổi :?thành _. Nó không phát hiện xung đột (Tôi cho rằng bạn không có cả hai foo:bar.mp3foo?bar.mp3).

#!/bin/bash
set -e
shopt -s dotglob globstar
cd ~/Music
for source in **/*; do
  target=/media/usb99/${source#"$HOME"/}
  target=${target//[:?]/_}
  if [[ -d $source ]]; then
    mkdir -p -- "$target"
  elif [[ $target -ot $source ]]; then
    cp -p -- "$source" "$target"
  fi
done

Kịch bản này hoạt động theo zsh với các sửa đổi nhỏ: thay thế shopt -s dotglob globstarbằng setopt dot_glob[[ $target -ot $source ]]bởi [[ ! -e $target || $target -ot $source ]].


2

Nếu đó là cho mục đích sao lưu, chỉ cần bỏ đi một tarball. Không có tên tệp phức tạp theo cách đó.


1
Làm rõ về mục đích (cũng áp dụng cho các bình luận khác): Đây là phần dành cho máy nghe nhạc mp3 trong xe hơi và phần mềm chỉ cho phép FAT32. Vì vậy, nó không dành cho mục đích sao lưu. Và lý do tên tập tin có các ký tự lạ là vì chúng, ví dụ như các tiêu đề của mp3, hoặc tên của các nghệ sĩ.
atorgovitsky

3
@atorgovitsky Bạn nên chỉnh sửa câu hỏi ban đầu của mình để cung cấp các chi tiết này.
depquid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.