2011-02-18 18 views
7

मैं एक वेबसाइट बना रहा हूं और मैं अपनी छवियों के फ़ाइल नामों को रखना चाहता हूं।स्क्रिप्ट उनके फ़ाइल नाम के sha1() हैश का उपयोग करके फ़ाइलों का नाम बदलने के लिए

मैं एक बैश स्क्रिप्ट फ़ाइल कैसे बना सकता हूं जो पुरानी फ़ाइल नाम के sha1 के साथ निर्देशिका में प्रत्येक फ़ाइल का नाम बदलता है?

मैं कोशिश की है:

#!/bin/bash 
for file in * 
do 
    if [ -f "$file" ];then 
    newfile="openssl sha1 $file" 
    mv "$file" $newfile" 
    fi 
done 

लेकिन वह काम नहीं करता :(

संपादित

सुझाव के आधार पर यहाँ मैं इस कोशिश की:

#!/bin/bash 
for file in old_names/* 
do 
    if [ -f "$file" ];then 
    newfile=$(openssl sha1 $file | awk '{print $2}') 
    cp $file new_names/$newfile.png 
    fi 
done 

यह फ़ाइलों का नाम बदलता है, लेकिन मुझे यकीन नहीं है कि क्या हो रहा है फ़ाइल नाम का हैश इस्तेमाल किया। क्या विस्तार हुआ है? रास्ता किया?

जानकारी

मैं तो छवियों को प्रदर्शित करने PHP के SHA1() फ़ंक्शन का उपयोग करेगा:

echo "<img src=\"images/".sha1("$nbra-$nbrb-".SECRET_KEY).".png\" />\n"; 
+0

परिभाषित करें 'काम नहीं करता'। – GolezTrol

+0

क्या फ़ाइल नामों में स्पेस वर्ण हैं? –

+1

'कुछ भी नहीं बदला जाता है' और 'नहीं' – Manu

उत्तर

6

अब तक और आपके संपादन में कोड में उदाहरण उदाहरण हैं फ़ाइल फ़ाइल के। आप फ़ाइल नाम है कि पिछले फ़ाइल नाम, पथ या विस्तार सहित नहीं की हैश हैं बनाने के लिए चाहते हैं, तो ऐसा करते हैं:

#!/bin/bash 
for file in old_names/* 
do 
    if [ -f "$file" ] 
    then 
     base=${file##*/} 
     noext=${base%.*} 
     newfile=$(printf '%s' "$noext" | openssl sha1) 
     cp "$file" "new_names/$newfile.png" 
    fi 
done 
+0

बहुत अच्छा, मैं देख सकता हूं कि आपके पास 28.7k अंक क्यों हैं :) – Manu

+0

यह अजीब है .. ऐसा लगता है कि php का sha1() फ़ंक्शन एक ही हैश वापस नहीं करता .. – Manu

+1

@Manu: ओह! माफ़ कीजिये! यह 'printf'% s '"$ noext" होना चाहिए। –

0

कोशिश

newfile=$(openssl sha1 $file)  
mv "$file" "${newfile##*= }" 
2

इस प्रयास करें:

newfile=$(openssl sha1 $file | awk '{print $2}') 
mv $file $newfile 
1

मैं एक ही sorta बात करने के लिए कोशिश कर रहा था, लेकिन यहाँ के टुकड़े/वास्तव में नहीं थे/मुझे क्या चाहिए, प्लस मैं स्क्रिप्टिंग के लिए नया ब्रांड हूं ... माफ करना ... अंत में मैंने कई विचारों को स्क्रिप्ट में एक साथ फंस दिया जो मुझे चाहिए जो करता है - ./pics में फ़ाइलों को देखें और वर्तमान विस्तार को बनाए रखते हुए उन्हें अपने पुराने हैश में नाम दें। मैंने इसे विभिन्न चित्रों के समूह पर परीक्षण किया है और अब तक यह इरादे से काम करता है। मुझे लगता है कि एक और नौसिखिया जैसे कि मैं इसे कॉपी/पेस्ट करने में सक्षम हूं और अगर आपका अंतिम परिणाम मेरे जैसा ही होता है तो यह अच्छा होगा। मदद के लिए सभी का धन्यवाद!

#!/bin/bash 
for file in ./pics/* 
    do 
    newfile=$(openssl sha1 $file | awk '{print $2}') 
    ext=${file##*.} 
    mv "$file" "./pics/$newfile"."$ext" 
    done 
+0

क्षमा करें, लेकिन यह स्क्रिप्ट प्रतीत होती है अपने नामों में एकाधिक रिक्त स्थान/बिंदुओं वाली फ़ाइलों को हटाने के लिए। आपका बहुत बहुत धन्यवाद! –

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