একাধিক ফাইল আনজিপ করতে স্ক্রিপ্টে বাশ করুন


1

আমার কাছে বিভিন্ন জিপ ফাইল রয়েছে যার মধ্যে সাবফোল্ডার রয়েছে এবং কোনও সাবফোল্ডার নেই। আমি তার ফোল্ডারে সমস্ত জিপটি বের করতে চাই। আমার বর্তমান স্ক্রিপ্টটি আমি যা চাই তা করতে চাইলে এতে সাবফোল্ডার রয়েছে। যাইহোক, যদি কোনও সাবফোল্ডার না থাকে তবে এটি তাদের একই ফোল্ডারে পৃথকভাবে তালিকাভুক্ত করে যা বিভ্রান্তিকর হবে কারণ আমার সেগুলি কী তা জানতে হবে।

আনজিপ ফোল্ডারের কাঠামোর আগে :

JCB-1.zip

- JCB  
   - KDY231-8000018  
      -> file1.txt, file2.txt  
   - KGC30-0152537  
      -> file1.txt, file2.txt  
   - S330V-0034006  
      -> file1.txt, file2.txt  

XZC605-0002319.zip

   - file_1.txt ,file_2.txt, file_3.txt

ZNE10-7845839.zip

- ZNE10-7845839  
  -> file1.txt, file2.txt  

আনজিপ ফোল্ডার কাঠামোর পরে :

- KDY231-8000018  
- KGC30-0152537  
- S330V-0034006  
- file_1.txt  
- file_2.txt  
- file_3.txt  

বর্তমান স্ক্রিপ্ট

#!/bin/bash

ZIPDIR=/mnt/www/log/_tmp
TMP=/tmp/zipfiles

cd $ZIPDIR
rm tmp/zipfiles 2>/dev/null

ls -l *.zip
if [ $? -eq 0 ]
then
  echo ".zip file found"

ls -1 $ZIPDIR/*.zip > $TMP

for i in `cat $TMP`
do
  unzip -o $i && rm $i
done
fi;

# Removing top level folder
mv $ZIPDIR/JCB/* . && rm -R JCB

if [ $? -eq 1 ]
then
  echo "NOT found"
fi;

আমার চিন্তাভাবনাটি হ'ল যে জিপটিতে সাবফোল্ডার নেই, আমি তাদের ফাইলনেম.জিপ থেকে তৈরি করতে হবে এবং ফাইল_1.txt থেকে নয় কারণ নামটি বোঝায় না। সুতরাং, চূড়ান্ত ফলাফল আনজিপিংয়ের পরে এই কাঠামো হবে।

চূড়ান্ত প্রত্যাশা আনজিপ ফোল্ডার কাঠামো :

- KDY231-8000018  
- KGC30-0152537  
- S330V-0034006  
- XZC605-0002319  

আপডেট হয়েছে: @ কনফেটি দ্বারা সরবরাহ করা কোডটি কাজ করে। ধন্যবাদ। এখানে আরও একটি জিপ ফাইলের কাঠামো রয়েছে যা আমি উল্লেখ করতে ভুলে গিয়েছিলাম এবং আমি উপরেও অন্তর্ভুক্ত করেছি। আমার সম্পাদনাগুলি সহ এখানে চূড়ান্ত কোড। এটি একটি কার্যকর কোড নাও হতে পারে তবে এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে।

#!/bin/bash

zipdir=/mnt/www/log/_tmp
cd $zipdir

for i in *.zip; do
    folder=${i::-4}
        mkdir -p  $folder
    unzip -o $i -d $folder && rm $i
    subdirs=$(find $folder -type d | wc -l)
    if [[ $subdirs -eq 2 ]]; then
        mv ./$folder/* ./
        rm -r $folder
    else if [[ $subdirs -gt 1 ]]; then
        mv ./$folder/*/* ./
        rm -r $folder
    fi
    fi
done

উত্তর:


0
#!/bin/bash
ZIPDIR=/mnt/www/log/_tmp
TMP=/tmp/zipfiles
cd "$ZIPDIR"
rm tmp/zipfiles 2>/dev/null

for i in ./*.zip; do
    folder=${i::-4}
    mkdir "$folder"
    unzip -o "$i" -d "$folder" && rm "$i"
    subdirs=$(find "$folder" -type d -printf ".\n" | wc -l)
    if [[ $subdirs -gt 1 ]]; then
        mv ./$folder/*/* ./
        rm -r "$folder"
    fi
done

এটি আপনার প্রদর্শিত কাঠামোর অনুরূপ ফাইলগুলির সাথে পরীক্ষিত এবং আমার জন্য পুরোপুরি কাজ করে।


আমি বিভিন্ন জিপ ফাইলগুলির সাথে ত্রুটি পাচ্ছি এবং এটি কারওর জন্য 2 টি ফোল্ডার সংরক্ষণ করছে। জেসিবি ..জিপ <- সাবফোল্ডার রয়েছে ./batchUnzip.sh: line 13: [[: JCB-6 JCB-6/JCB JCB-6/JCB/NCP51-0284052: syntax error in expression (error token is "JCB-6/JCB JCB-6/JCB/NCP51-0284052") XZC605-0002319.zip <- কোনও সাবফোল্ডার নেই ./batchUnzip.sh: line 13: [[: XZC605-0002319: value too great for base (error token is "0002319")
ডাকসু

আমার ভুল. সাব-ডিরেক্টরিগুলির | wc -lআসল সংখ্যা পেতে আমি অনুসন্ধান কমান্ডের পিছনে ভুলে গেছি । আমি আমার উত্তর সম্পাদনা করেছি। এটি মূলত একটি সংখ্যার সাথে সাব-ডিরেক্টরিগুলির একটি স্ট্রিং তালিকার তুলনা করছিল। Eops।
কনফিটি

সময় সাহায্য করার জন্য ধন্যবাদ। আপনি কোড পরীক্ষা করার সুযোগ পেয়েছেন? ত্রুটিটি চলে যাওয়ার পরে, এটি আমাকে একটি অদ্ভুত ফলাফল দেয়।
ducsu

এটাকে এখুনি দেখো. আমি মিস করেছি ./$folder/*মধ্যে mvনীচের অংশে কমান্ড। মূলত একটি ফোল্ডারটি নিজের মধ্যে স্থানান্তরিত করার চেষ্টা করছে, হায়। আমি বর্তমান কোডটি চেষ্টা করেছি এবং এটি আমার পক্ষে কাজ করে।
কনফিটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.