Fat32 dosya sistemine Linux kopyası: geçersiz argüman


12

Ne zaman cp kullanarak bir ext3 bölümünden bir fat32 bir dosya kopyalamak:

cp -R /ext3/stuff /fat32/partition/

İki nokta üst üste ve soru işaretli tüm dosyalar için geçersiz argüman mesajları alıyorum.

Hedef dosya sistemi için geçersiz karakterleri çıkarmak için cp almanın herhangi bir yolu var mı?

edit: cp seçeneklerini tekrar kontrol ettim ve aptal olmadıkça orada hiçbir şey yok. Eminim bir senaryo yazabilirim, ama daha temiz bir çözüm olmalı gibi geliyor!

Yanıtlar:


10

Karmaşık kopyalar veya yeniden adlandırmalar istediğinizde olağan şüpheliler GNU cp, zsh, zsh, rsync ve pax (veya cpio) 'dan oluşur. Cp'de yeniden adlandırma özelliği veya rsync'te (sanmıyorum) yoktur. Zmv yeniden adlandırabilse de, bu yinelemeli kopyalarla uyumlu değildir. Ancak pax bunu yapabilir:

cd /ext3
pax -rw -s '/[*?:]/_/gp' stuff /fat32/partition

Bu her birini olarak *?:değiştirir _. Uyarı: minimal olarak test edilmiştir. Çarpışmalar varsa, hangi dosya son kopyalanırsa kopyalanır.


Güzel - daha önce hiç pax kullanmadı. Beni taktığın için teşekkürler.
mo-seph

1
Ters eğik çizgi de vfat için sorun çıkarır. Normal ifadeye de ekleyin. Teşekkürler!
lzap

Support.grouplogic.com/?p=1607 uyarınca tam liste : /? <> \: * | ”^. Ayrıca boşluk veya nokta ile bitemez ve bazı adlar saklıdır. Mtools manpage daha büyük bir liste verir:,; :? + * = [] <> '"\ / |
dhill

Ve farklı bir not ve benimle aynı sorunu yaşayan insanlar için: pax, -s komutunu -u güncelleme komutuyla birlikte kullanmayı desteklemez. Yani, zaten mevcut olsalar bile, yeniden adlandırılan dosyaları tekrar kopyalar. Bunu öğrenmem saatler aldı .
balu

11

Gilles'in gönderisine dayanarak aşağıdaki listeyi test ettim:

#!/bin/sh
touch questionmark?
touch less<
touch less\<
touch more\>
touch backslash\\
touch colon:
touch asterisk\*
touch pipe\|
touch inch\"
touch carret\^
touch comma,
touch semicolon\;
touch plus+
touch equals=
touch lbracket[
touch rbracket]
touch quote\'

Her paxşeyi çalışana kadar Android telefon MicroSDHC kartına vfat dosya sistemi ve rafine komutla kopyalamaya çalıştım. Windows ve Unicode için bu yeterli olmayabilir:

pax -rw -s '/[?<>\\:*|\"]/_/gp' source dest

Ayrıca, üzerine yazma olmadığından emin olmak için -k seçeneğini de kullanabilirsiniz (dosya adlarındaki çakışmalar nedeniyle). Yorumda verdiğim her iki liste de Linux vfat davranışından farklıydı.


0

Ben cp -r kaynak usbstick ile kopyalarken "Geçersiz argüman" aldı ve neden bir boşluk ile biten bir kaynak dosya adı olduğunu öğrendim. Alanı kaldırmak mesajı temizledi. Yanlış addaki dosya, bu durumda e-posta programı dizinlerinde BTW oldu.


0

Sadece bunu yapmak için paxnedenim vardı ve temelli cevap iyi olsa da, aksanlı karakterlerle ilgili problemlerle karşılaştı.

Bu yüzden kullanımı daha kolay buldum tarve izin verilmeyen tüm karakterleri alt çizgi ile değiştirdim:

cd /parent-of-source
tar cf - Söurce | (cd /destination; tar xvf - --transform='s/[^A-Za-z0-9\/ ]/_/g')

Şüphesiz, yukarıdaki karakterlerden daha iyi bir izin verilen karakter listesi bulmak mümkündür, ancak bu işe yarar.


0

Bu çok ilginç sorunun cevaplarını okuduktan ve Android (exfat) ve bir araba eğlence sistemi (vfat) için SD kart ile biraz deneme yaptıktan sonra, bu küçük bash betiği ile geldim.

#! /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

Hedefi argüman olarak alır ve findmüzik havuzumdaki tüm dosyaları bulmak için kullanılır .

Her dosya yolu için, hedefi önceden ekleyerek ve rahatsız edici herhangi bir karakteri bir alt çizgi ile değiştirerek bir hedef yol ve dosya adı hesaplar _. Ben karakterlerin bir beyaz liste kullanın (harfler, rakamlar, -, /, ., . (, )Ve _) istenmeyen noktalamayı kaldırmak için.

Yerel ayara bağlı olarak, yol ve dosya adında aksanlı harfler, göründüğü gibi, modern FAT dosya sistemleri için sorun olmayacaktır.

Her hedef dosya yolu ve adı için, dizinler gerektiği şekilde oluşturulur ve mkdir -pdaha önce var olmadıkça dosya kopyalanır.

"Çeşitli yerlerdeki alıntı karakterlerine dikkat edin, içindeki boşluklara sahip yolları ve adları parçalamaktan kaçınmaları gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.