Fat32 फाइल सिस्टम के लिए लिनक्स कॉपी: अमान्य तर्क


12

जब मैं cp का उपयोग कर किसी fat32 एक ext3 विभाजन से फाइल कॉपी करता हूं:

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

मुझे कॉलन और प्रश्नवाचक चिह्न वाली सभी फ़ाइलों के लिए अमान्य तर्क संदेश मिलते हैं।

वहाँ किसी भी तरह से लक्ष्य फाइल सिस्टम के लिए अमान्य वर्णों को बाहर निकालने के लिए cp है?

संपादित करें: मैंने cp के विकल्पों के माध्यम से फिर से जाँच की है, और जब तक मैं बेवकूफ नहीं हो रहा हूँ, वहाँ कुछ भी नहीं है। मुझे यकीन है कि मैं एक स्क्रिप्ट लिख सकता हूं, लेकिन ऐसा लगता है कि एक क्लीनर समाधान होना चाहिए!

जवाबों:


10

जब आप जटिल प्रतियाँ या नाम बदलना चाहते हैं तो सामान्य संदेह GNU cp, zsh से zm, rsync और pax (या cpio) होते हैं। Cs में कोई नाम बदलने की सुविधा नहीं है, न ही (मुझे लगता है) rsync में। जबकि zmv का नाम बदल सकता है, यह पुनरावर्ती प्रतियों के साथ अच्छी तरह से जाल नहीं करता है। लेकिन पैक्स यह कर सकते हैं:

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

यह प्रत्येक *?:को बदलता है _। चेतावनी: न्यूनतम परीक्षण किया गया। यदि टकराव होते हैं, तो जो भी फ़ाइल अंतिम जीत की नकल होती है।


अच्छा - पहले पैक्स का उपयोग नहीं किया है। मुझे इस पर रखने के लिए धन्यवाद।
मो-सेफ

1
बैकस्लैश भी vfat को समस्याएँ देता है। इसे regexp में भी शामिल करें। धन्यवाद!
लाजप

Support.grouplogic.com/?p=1607 के अनुसार पूरी सूची है: /? <> \: * | ”^ इसके अलावा यह अंतरिक्ष या डॉट के साथ समाप्त नहीं हो सकता है और कुछ नाम आरक्षित हैं। माउंटोल मैनपेज और भी बड़ी सूची देता है:; :? + * = [] <> '"\ / |
dhill

और एक अलग नोट और मेरे जैसे एक ही मुद्दे वाले लोगों के लिए: पैक्स अद्यतन कमांड -u के साथ संयोजन में -s का उपयोग करने का समर्थन नहीं करता है। यानी यह हमेशा नाम की फाइलों को फिर से कॉपी करेगा भले ही वे पहले से मौजूद हों। इसके बारे में पता करने में मुझे घंटों लग गए ।
बालू

11

गिलेस द्वारा पोस्ट के आधार पर मैंने निम्नलिखित सूची का परीक्षण किया:

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

मैंने paxसब कुछ काम होने तक vfat फाइल सिस्टम और परिष्कृत कमांड के साथ एंड्रॉइड फोन माइक्रोएसडीएचसी कार्ड पर कॉपी करने की कोशिश की । यह अभी भी विंडोज और यूनिकोड के लिए पर्याप्त नहीं है:

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

आप यह सुनिश्चित करने के लिए -k विकल्प का उपयोग करना चाह सकते हैं कि कोई ओवरराइट (फ़ाइल नामों में टकराव के कारण) नहीं हैं। टिप्पणी में मैंने जो सूची दी थी, वे दोनों लिनक्स vfat व्यवहार से अलग थीं।


0

Cp -r source usbstick के साथ कॉपी करने पर मुझे "अमान्य तर्क" प्राप्त हुआ और यह पता चला कि एक स्पेसफिलनेम एक स्पेस के साथ समाप्त हो रहा था। स्पेस हटाने से मैसेज क्लियर हो गया। गलत नाम वाली फाइल इस मामले में मेलर प्रोग्राम डाइरेक्टरीज़ में बीटीडब्लू थी।


0

मुझे बस ऐसा करने की आवश्यकता थी, और जब-जब इसका paxजवाब अच्छा था, तब भी यह उच्चारण पात्रों के साथ समस्याओं में भाग गया।

इसलिए मुझे इसका उपयोग करना आसान लगा tarऔर इसे सभी गैर-अनुमत वर्णों को अंडरस्कोर के साथ बदलने के लिए मिला:

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

ऊपर वाले की तुलना में अनुमत पात्रों की बेहतर सूची के साथ आना संदिग्ध है, लेकिन यह काम करता है।


0

इस बहुत ही दिलचस्प सवाल के जवाब को पढ़ने के बाद और एंड्रॉइड (एक्सफ़ैट) और एक कार मनोरंजन प्रणाली (vfat) के लिए एसडी कार्ड के साथ कुछ प्रयोग करने के बाद, मैं इस छोटी सी बैश स्क्रिप्ट पर आया।

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

यह गंतव्य (माउंट बिंदु) को तर्क के रूप में लेता है और findमेरे संगीत भंडार में सभी फ़ाइलों का पता लगाने के लिए उपयोग करता है।

प्रत्येक फ़ाइल पथ के लिए, यह गंतव्य पथ और फ़ाइल नाम को गंतव्य से बाहर निकालकर और किसी भी आक्रामक चरित्र को किसी अंडरस्कोर के साथ प्रतिस्थापित करता है _। (अक्षर, अंक, मैं पात्रों में से एक सफेद सूची का उपयोग -, /, ., (, )और _) किसी भी अवांछित विराम चिह्न निकालें।

लोकेल के आधार पर, यह पथ और फ़ाइल नाम में उच्चारण अक्षरों को छोड़ देगा, जो आधुनिक एफएटी फ़ाइल सिस्टम के लिए ठीक है, जैसा कि ऐसा लगता है।

प्रत्येक गंतव्य फ़ाइल पथ और नाम के लिए, निर्देशिकाओं का उपयोग आवश्यकतानुसार किया जाता है mkdir -p, फिर फ़ाइल की प्रतिलिपि बनाई जाती है, जब तक कि यह पहले से मौजूद न हो।

"विभिन्न स्थानों पर उद्धरण चिह्नों पर ध्यान दें , उन्हें अलग-अलग तोड़ने से उनमें पथ और नामों को रखने की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.