यदि मौजूद है तो एम.वी., नाम बदलें


26

मुझे बहुत सी छवियों को एक निर्देशिका में इकट्ठा करने की आवश्यकता है। उन छवियों में से कई में समान फ़ाइल नाम हैं।

क्या इसका कोई सुरक्षित संस्करण mvस्वचालित रूप से फ़ाइलों का नाम बदल देगा यदि लक्ष्य फ़ाइल नाम पहले से मौजूद है तो pic1.jpegकुछ ऐसा हो जाता है pic1_2.jpeg?

मैं अपनी खुद की पाइथन स्क्रिप्ट लिख सकता था लेकिन वहाँ कुछ इस तरह से होना चाहिए ताकि मैं कर सकूँ:

find . -type f -name *.jpg -exec mvsafe '{}' /targetpath/ \;

जवाबों:


38

mv पहले से ही इस बॉक्स से बाहर का समर्थन करता है (कम से कम डेबियन में):

mv --backup=t <source_file> <dest_file>

जैसा कि mv (1) मैनपेज में देखा गया है:

--backup[=CONTROL]
         make a backup of each existing destination file

The  backup  suffix  is  `~',  unless  set  with   --suffix   or   SIM‐
PLE_BACKUP_SUFFIX.   The version control method may be selected via the
--backup option or through the  VERSION_CONTROL  environment  variable.

--backup=t"क्रमांकित बैकअप बनाएं" का अर्थ करने के लिए , निम्नानुसार चालान करें:

env VERSION_CONTROL=numbered mv --backup=t <source_file> <dest_file>

(dest_file बेशक एक निर्देशिका हो सकती है)।

संपादित करें: बाद के संस्करणों में (कम से कम GNU Coreutils 8.22 लेकिन पहले से बहुत पहले से ही) आप बस लिख सकते हैं

mv --backup=numbered <source_file> <dest_file>

1
एक अद्भुत स्वच्छ समाधान के लिए +1। बीटीडब्ल्यू विकल्प आरएचईएल 6 पर भी मौजूद है।
पावेल ब्रोडाकी

अच्छी कार्यक्षमता होने पर, यह वास्तव में मेरे मामले में इतना मदद नहीं करता है क्योंकि यह विस्तार के बाद प्रत्यय को जोड़ देगा, इसलिए फाइलें जैसे .jpg ~ 1 ~ के साथ समाप्त हो जाएंगी, जबकि मुझे उन्हें _1.jpg नाम देने की आवश्यकता होगी। मैं शायद एमएमवी का उपयोग फ़ाइलों को स्थानांतरित करने के बाद उनका नाम बदलने के लिए करूंगा।
theduke

4
इस mmv आदेश करने के बाद मेरी वांछित परिणाम प्राप्त होगा mv --backup = गिने: mmv -v " " # 1_ # 3. # 2 "~ * ~।"
theduke

मेरे डेबियन सिस्टम (mmv 1.01b-18) पर, सही mmv कमांड है:mmv -v "*.*~*~" "#1_#3.#2"
जेवियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.