नाम बदलने के साथ फाइल कॉपी करें


28

मेरे पास एक बहुत बड़ा पेड़ है। कुछ फ़ाइलों का एक ही नाम है, लेकिन अलग-अलग मामलों में, उदाहरण के लिए, some_code.cऔर Some_Code.c

इसलिए जब मैं इसे NTFS / FAT फाइलसिस्टम में कॉपी करने की कोशिश कर रहा हूं, तो यह मुझसे इस बारे में पूछता है कि क्या मैं चाहता हूं कि यह फाइल को रिप्लेस करे या इसे छोड़ दे।

क्या ऐसी फ़ाइलों का स्वचालित रूप से नाम बदलने का कोई तरीका है, उदाहरण के लिए,  (1)संघर्ष फ़ाइल के नाम को जोड़कर (जैसा कि विंडोज 7 करता है)?


जिज्ञासु। मैं सिर्फ देखना चाहता था, क्या त्रुटि की तरह मैं (के अनुसार, HPFS / NTFS मिल अगर मैं एक NTFS-विभाजन पर एक ही नाम के साथ एक फ़ाइल का उत्पादन करने की कोशिश sudo fdisk -l /dev/sda), और किया touch foo; touch Fooऔर 2 फाइलों के साथ समाप्त हो गया fooऔर Foo। लेकिन मैं विंडोज में रिबूट करने के लिए उत्सुक नहीं हूं, यह देखने के लिए कि वे वहां कैसे दिखते हैं। यह सिर्फ एक FAT समस्या हो पलायन? आह - मेरे पास एफएटी के साथ एक यूएसबी-स्टिक है, और एक फ़ाइल के अंदर एक एफएटी-सिस्टम बना सकता है, ... - एक पल कृपया। :)
उपयोगकर्ता अज्ञात

जवाबों:


41

कई GNU उपकरण जैसे कि cp, mvऔर tarलक्ष्य मौजूद होने पर बैकअप फाइल बनाने का समर्थन करते हैं। अर्थात्, कॉपी fooकरते समय bar, यदि पहले से ही एक फ़ाइल है bar, जिसे मौजूदा bar नाम दिया गया है, और कॉपी के बाद barकी सामग्री होगी foo। डिफ़ॉल्ट रूप से, barइसका नाम बदल दिया जाता है bar~, लेकिन व्यवहार को संशोधित किया जा सकता है:

                                # If a file foo exists in the target, then…
cp -r --backup source target    #   rename foo → foo~
cp -r --backup=t source target  #   rename foo → foo.~1~ (or foo.~2~, etc)

अन्य वेरिएंट हैं, जैसे कि केवल पहले से मौजूद होने पर गिने हुए बैकअप बनाना। देखें coreutils पुस्तिका अधिक जानकारी के लिए।


1
प्रतिभाशाली। मुझे नहीं पता था कि यह विकल्प मौजूद था, और यह सिर्फ बेहद उपयोगी साबित हुआ। धन्यवाद @ गिल्स।
स्टीव हिल

2
OSX cp में --बैकअप फ्लैग नहीं है। उपयोग करें brew install coreutilsऔर फिर gcpइसके बजाय कमांड का उपयोग करें ।
वेस्टन गैंगर 21:16

6

मैंने कोशिश की

apropos copy | grep "(1)" 

संभावित उम्मीदवारों को खोजने के लिए, और mcopy दिखाया।

man mcopy 

एक आशाजनक विकल्प दिखाता -D clash-optionहै कि अच्छा नहीं है? लेकिन इतना अच्छा नहीं - यह वर्णित नहीं है। लेकिन mtools.dvi के लिए कुछ संकेत हैं, जो मैंने अपने सिस्टम पर खोजे, सफलता के बिना, और Google के माध्यम से, बिना सफलता के, लेकिन फिर, Google के साथ, मैंने सीधे इस साइट को खोजा mcopy clash-optionऔर पाया

मैंने एक छोटा परीक्षण किया

mcopy -D A f* a 

ऑटोरेंम और टार्गेडिर के लिए परीक्षण करना a- ऑटोरेंमिंग के बजाय इसने मुझे हर फाइल को अनदेखा या ओवरराइड करने के लिए कहा, यह बेवकूफी है ...।

मेरा संस्करण है mtools-4.0.10और सहायता पृष्ठ १ ९९ ६ - १५ साल पुराना है। क्या हमें वास्तव में कुछ सुविधाएँ खोनी चाहिए?

मैं काम को दो चरणों में विभाजित करूंगा:

  • एक छोटा कार्य करें, जो एक फ़ाइल के लिए एक अद्वितीय नाम उत्पन्न करता है, अगर उस नाम पर कब्जा है।
  • findउस स्क्रिप्ट को चलाएं , और उस फ़ाइल को निष्पादित करें जिसे आप कॉपी करना चाहते हैं।

क्या हम इस दृष्टिकोण में सहायता करेंगे? :)

यहाँ एक स्क्रिप्ट है, ऑटोरेनम फ़ाइलों के लिए:

#!/bin/bash

name=$1
target=$2

autorename () {
name=$1
target=$2
no=$3 

test -e ${target}/${name}.$no && autorename ${name} ${target} $((no+1)) || cp ${name} ${target}/${name}.$no 

}

test -e ${target}/${name} && autorename ${name} ${target} 0 || cp ${name} ${target} 

और यह मेरा परीक्षण आह्वान है:

find -maxdepth 1 -name "fo*" -type f -exec ./autorename.sh {} /mnt/hidden/test/a ";"

नोट: -maxdepth, -name और -type जहां उपयोग की गई फ़ाइलों की संख्या को नाटकीय रूप से प्रतिबंधित करने के लिए उपयोग किया जाता है। मैंने गहरी फ़ाइल संरचनाओं के लिए स्क्रिप्ट का परीक्षण नहीं किया, न ही फ़ाइलनाम और अन्य में फ़ंक्शंस जैसे लाइनफ़ीड, पेजफ़ीड और इतने पर।

मैंने .1 का उपयोग किया क्योंकि यह अधिकांश कमांड में परेशानी नहीं करता है, जबकि (ए) को अक्सर मास्किंग की आवश्यकता होती है।



0

जीएनयू के साथ नहीं cp, कम से कम।

आपको दृढ़ता से सलाह दी जाती है कि डुप्लिकेट फ़ाइल नाम (मामले की अनदेखी) न करें, वे बस आपको दर्द की दुनिया का कारण बनेंगे। इस तरह के डुप्लिकेट की एक सूची का उपयोग कर खोजें

find . | tr A-Z a-z | sort | uniq -d

फिर आउटपुट के रूप में प्रत्येक पंक्ति के लिए मैन्युअल रूप से एक फ़ाइल का नाम बदलें। भविष्य में डुप्लिकेट बनाने से बचने की कोशिश करें।


उस आदमी ने कभी यह नहीं सोचा कि वह वही है जिसने उस झंझट को पैदा किया।
tshepang

खैर, हाँ, सच है, लेकिन वह एक परिणाम है
yes

मेरे पास एक ऐसी स्थिति है जहां मैं थोड़ा अलग समय से बैकअप के साथ समाप्त हुआ। उन्हें संयोजित करना चाहते हैं, लेकिन अलग-अलग संस्करणों को नहीं। उदाहरण के लिए, सभी के लिए मुझे पता है, पुराना बेहतर हो सकता है। मैं जांच करने के बाद ही बता सकता हूं। इस बीच, बैकअप की प्रतिलिपि बनाने और उसका नाम बदलने की आवश्यकता है।
abalter
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.