2014-11-13 6 views
8

मेरे पास अलग-अलग फ़ोल्डर्स में बहुत सारे रार अभिलेखागार हैं और उन्हें सभी को अनपॅक करना चाहते हैं।फ़ाइलों को ढूंढें और आदेश निष्पादित करें

मुझे यह पता लगाने में परेशानी हो रही है कि इसे कैसे किया जाना चाहिए और कुछ मदद की ज़रूरत है।

#!/bin/bash 
## For all inodes 
for i in pwd; do 
    ## If it's a directory 
    if [ -d "$i" ] then 
     cd $i 

     ## Find ".rar" file 
     for [f in *.rar]; do 
      ./bin/unrar x "$f" # Run unrar command on filename 
      cd .. 
     done 
    done 
done 

मैं बैश स्क्रिप्टिंग से परिचित नहीं हूं और मुझे लगता है कि कोड एक से अधिक बार गलत है। लेकिन मुझे लगता है कि यह बुनियादी संरचना

उत्तर

12

आप find आदेश का उपयोग कर सकते हैं होना चाहिए:

find -name '*.rar' -exec unrar x {} \; 

find विकल्प exec जो हर फ़ाइल है कि पाया गया था पर उस आदेश पर अमल होगा प्रदान करता है।

+0

'ढूंढ', जिस तरह से मैंने इसे पोस्ट किया है, आपको * बहुत सारी खुली फ़ाइल त्रुटियों से रोक देगा *। मुझे लगता है कि आपने 'foo * ढूंढें' जैसे कुछ किया है, जिसका अर्थ है कि आपने निर्देशिका नाम के लिए एक ग्लोब का उपयोग किया है (या कुछ और जिसे मुझे पता नहीं है)। अपनी विशेष समस्या के बारे में एक प्रश्न पूछने के लिए स्वतंत्र महसूस करें। लिंक को यहां प्रश्न पर छोड़ दें और मुझे वहां एक नज़र आएगी। – hek2mgl

+0

समस्या स्पष्ट रूप से 'i के लिए 'ls/var/cpanel/users /';' है। यह 'i/var/cpanel/users/*' – hek2mgl

+0

@Luka के लिए होना चाहिए 'समस्या * '.jpg" '- जो अनजान है, इसे देखें। यह उस फ़ोल्डर में सभी जेपीजी फ़ाइलों में विस्तारित होगा जो उस त्रुटि को ट्रिगर करता है। जिस आदेश को आप ढूंढ रहे हैं वह है: 'i/var/cpanel/users/* में; करो sudo -H -u "$ i" ढूंढें "/ home/$ i/public_html" -type f -name '* .jpg' -execdir jpegoptim {} \; ; किया गया – hek2mgl

5

आपको एक स्क्रिप्ट की आवश्यकता नहीं है।

find . -name "*.rar" -exec unrar x {} \; 

साथ ही, आपको unrar आदेश के लिए मिल के परिणाम दे सकते हैं।

find . -name "*.rar" | xargs unrar x 
संबंधित मुद्दे