मैं डुप्लिकेट फ़ाइलनाम के साथ फ़ाइलों को एक निर्देशिका में कैसे कॉपी कर सकता हूं और डुप्लिकेट का नाम बदलकर स्वचालित रूप से नाम बदलकर दोनों फ़ाइलों को बनाए रख सकता हूं?


11

विंडोज़ ओएस पर, जब आप किसी फ़ाइल को उस निर्देशिका में कॉपी करते हैं जिसमें पहले से ही उस नाम वाली फ़ाइल होती है, तो यह आपसे पूछती है कि क्या आप चाहते हैं:

  1. फ़ाइल की प्रतिलिपि बनाएँ और मौजूदा एक को बदलें / अधिलेखित करें
  2. नई फ़ाइल को निर्देशिका में कॉपी करना रद्द करें
  3. फ़ाइल की प्रतिलिपि बनाएँ, लेकिन उसका नाम बदलें (जैसा कि "फ़ाइल नाम - कॉपी (1)")

जब मैं उबंटू में ऐसा करता हूं, मेरे पास वह 3 विकल्प नहीं है (जो कि बहुत उपयोगी विकल्प है)। क्या उबंटू में ऐसा करने का कोई तरीका है?

जवाबों:


17

दुर्भाग्य से Nautilus के पास वह विकल्प नहीं है।

विकल्प 1: एक अलग फ़ाइल प्रबंधक

आप डॉल्फिन की तरह एक और फ़ाइल प्रबंधक की कोशिश कर सकते हैं ।

डॉल्फिन स्थापित करें( ब्रह्मांड भंडार की आवश्यकता है)

विकल्प 2: कमांड-लाइन

आप cp(1)बैकअप विकल्प के साथ कमांड लाइन प्रोग्राम का भी उपयोग कर सकते हैं :

cp --backup -t DESTINATION SOURCE [SOURCE...]

इसके निम्नलिखित प्रभाव होते हैं जिन्हें अन्य विकल्पों के साथ नियंत्रित किया जा सकता है जैसा कि मैनुअल पेज में वर्णित है cp(1):

--backup[=CONTROL] - प्रत्येक मौजूदा गंतव्य फ़ाइल का बैकअप बनाएं

-b- जैसे --backupलेकिन एक तर्क स्वीकार नहीं करता है

-S, --suffix=SUFFIX- सामान्य बैकअप प्रत्यय को ओवरराइड करें

बैकअप प्रत्यय है ~, जब तक कि के साथ --suffixया सेट नहीं है SIMPLE_BACKUP_SUFFIX। संस्करण नियंत्रण विधि को --backupविकल्प के माध्यम से या VERSION_CONTROLपर्यावरण चर के माध्यम से चुना जा सकता है । यहाँ मूल्य हैं:

  • none, off: कभी नहीं बैकअप लेते हैं (भले ही --backupदिया जाता है)
  • numbered, t: मेकअप गिने बैकअप
  • existing, nil: गिने गिने बैकअप मौजूद है, सरल अन्यथा
  • simple, never: हमेशा सरल बैकअप बनाने

उदाहरण

cp --backup=existing --suffix=.orig -t ~/Videos ~/Music/*

इस में सभी फ़ाइलों की प्रतिलिपि जाएगा ~/Musicकरने के लिए ~/Videos। यदि गंतव्य पर उसी नाम की फ़ाइल मौजूद है, तो .origउसका नाम बैकअप के रूप में जोड़कर नाम बदल दिया जाता है । यदि बैकअप के समान नाम वाली फ़ाइल मौजूद है, तो बैकअप को बदले में नाम दिया जाता है .1और यदि वह मौजूद है .2और आगे भी। उसके बाद ही गंतव्य के लिए स्रोत फ़ाइल कॉपी की जाती है।

यदि आप उप-श्रेणियों में फ़ाइलों की प्रतिलिपि बनाना चाहते हैं तो पुन: उपयोग करें:

cp -R --backup=existing --suffix=.orig -t ~/Videos ~/Music

एक अलग फ़ाइल प्रबंधक का उपयोग करने के सुझाव के लिए धन्यवाद। दुर्भाग्य से, थूनार के पास वह विकल्प नहीं है जिसका मैं उल्लेख कर रहा हूं। यह बस है: रद्द करें, सभी को छोड़ें, छोड़ें, बदलें, सभी को बदलें। डॉल्फिन की कोशिश करेंगे।
हाइजेनबर्गमैन

1
डॉल्फिन इसके लिए बहुत अच्छा काम करता है :)
heisenbergman

दोनों को आज़माने के लिए धन्यवाद। मैं आपके निष्कर्षों के अनुसार अपने प्रश्न को अपडेट करूंगा।
डेविड फ़ॉस्टर

@ हाइजेनबर्गमैन, हाय आपका क्या मतलब था डॉल्फिन इसके लिए महान काम करता है? यह नाम बदलने का विकल्प प्रदान करता है, लेकिन यह अभी भी मुझे एक-एक करके फाइलों का नाम बदलने की अनुमति देता है। दुर्भाग्य से "सभी पर लागू होता है" विकल्प का नाम बदलने के विकल्प के साथ उपयोग नहीं किया जा सकता है। बड़ी मात्रा में फ़ाइलों के लिए यह काफी बेकार है। क्या यह सिर्फ मेरा संस्करण है? क्या आपने डॉल्फिन का उपयोग करके एक ही बार में (जैसे आप विंडोज में कर सकते हैं) अपने सभी डबल्स का नाम बदलने का प्रबंधन किया था?
Kvothe

1
@ n1k31t4 कृपया --backup=existingफिर से वर्णन पढ़ें । संकेत: निम्नलिखित मामले में क्या होता है touch foo bar; cp -v --backup=numbered foo bar; cp -v --backup=existing foo bar:?
डेविड फ़ॉस्टर

2

सुपरसुसर पर यह मिला :

#!/bin/bash
cp -vn "$1" "$2"/ || cp -vn "$1" "$2"/"${1##*/}"~"$(md5sum "$1" | cut -f1 -d' ')"

जिस फ़ाइल का नाम है वही फ़ाइल नाम के साथ जोड़े गए md5sum के साथ फ़ाइल में बदल जाती है। यदि आप इसे "saveCopy" जैसे फ़ाइल नाम पर सहेजते हैं, तो आप इसे findनिष्पादित करने के लिए इस तरह का उपयोग कर सकते हैं :

find . -name 'z*.jpg' -exec ./saveCopy {} /tmp/Extracted/ \;

इस बारे में अधिक जानकारी के लिए लिंक देखें।



0

इस स्क्रिप्ट को शीर्ष निर्देशिका में कॉपी करें, इसे निष्पादन योग्य बनाएं और इसे चलाएं:

#!/bin/bash

## Get a list of all files
list=$(find . -mindepth 2 -type f -print)
nr=1

## Move all files that are unique
find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
    mv -n $file ./
done
list=$(find . -mindepth 2 -type f -print)

## Checking which files need to be renamed
while [[ $list != '' ]] ; do
   ##Remaming the un-moved files to unique names and move the renamed files
   find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
       current_file=$(basename $file)
       mv -n $file "./${nr}${current_file}"
   done
   ## Incrementing counter to prefix to file name
   nr=$((nr+1))
   list=$(find . -mindepth 2 -type f -print)
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.