2011-07-11 17 views
5

मैं निम्नलिखित की तरह एक सूची है से नाम के साथ फ़ाइल की एक सूची का नाम बदलें, lista.txt नामक एक फाइल में:एक और सूची

mickey 
donald 
daffy 
bugs 

मैं कई फ़ाइलों वाला कोई फ़ोल्डर है: filename1, filename2, .. फ़ाइल नाम एन।

मैं उन फ़ाइलों के माध्यम से पुनरावृति को हासिल करना चाहते हैं:

filename1 => mickey 
filename2 => donald ... 

तुम मुझे इस कार्य के लिए नमूना कोड काम कर सकते हैं?

+1

क्या आपके पास फ़ोल्डर में फ़ाइलों के मैपिंग के लिए कोई मानदंड है? मैं यह पूछ रहा हूं क्योंकि: यदि आप फ़ाइलों को प्राप्त करने के लिए 'ls' कहें, तो आप वर्णानुक्रम में क्रमबद्ध हो जाएंगे, लेकिन आखिरकार, आप अलग-अलग मैपिंग' filename_X => string_Y' –

उत्तर

6

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

x=1; for y in $(cat lista.txt); do mv $y filename$x; let x=$x+1; done 
+0

क्षमा कर सकते हैं, मैंने अपने प्रश्न में एक भयानक गलती की है । वास्तविक फ़ाइल नाम क्रमांकित नहीं हैं लेकिन आरामदायक हैं। नहीं एफ 1, एफ 2 ... एफएन। लेकिन f_a, f_pippo, f123 और इसी तरह ... मैं दो सूचियों के साथ कैसे बातचीत कर सकता हूं? –

1
let "count=1" 

for newname in $(cat lista.txt); do 
    mv "filename$count" "$newname" 
    let "count++" 
done 
3

का उपयोग बैश सरणियों:

files=(*) 
i=0 
while read -r new_name; do 
    mv "${files[$i]}" "$new_name" 
    ((i++)) 
done < lista.txt 
1

मैं इस तरह से किसी दिए गए "filelist.txt" के अनुसार एक निर्देशिका के सभी flac फ़ाइलों का नाम बदलना नई फ़ाइल वर्णनकर्ता के साथ डबल पुनर्निर्देशन प्रयोग किया है:

while read -u 9 filename ; do 
    read -u 8 newname 
    echo mv "$filename" "$newname" 
done 9<<<"$(ls -1 *flac)" 8< filelist.txt 

डायरेक्टरी में प्रत्येक .flac फ़ाइल नाम फ़ाइल डिस्क्रिप्टर 9 के माध्यम से परिवर्तनीय "फ़ाइल नाम" के माध्यम से जाता है ई पुनरावृत्ति, filelist.txt की प्रत्येक पंक्ति फ़ाइल descriptor 8 के माध्यम से परिवर्तनीय "newname" के लिए जाती है।

हां, नए फाइल डिस्क्रिप्टरों में से एक से बचा जा सकता था और केवल डिफ़ॉल्ट मानक इनपुट ("-u 9" और "9" को हटाकर) का उपयोग किया जाता था, लेकिन मुझे उन लोगों के लिए stdin का उपयोग करने के लिए उपयोग नहीं किया गया था; इस तरह आप इंटरएक्टिविटी या नियंत्रण के लिए लूप के अंदर एक पठन कथन शामिल कर सकते हैं, और यह पुनर्निर्देशित डेटा से भरा नहीं जाएगा।

गूंज "केवल परीक्षण" के लिए है और ऑपरेशन को मंजूरी के बाद हटा दिया जाना चाहिए।

संबंधित मुद्दे