আমার কাছে বিভিন্ন জিপ ফাইল রয়েছে যার মধ্যে সাবফোল্ডার রয়েছে এবং কোনও সাবফোল্ডার নেই। আমি তার ফোল্ডারে সমস্ত জিপটি বের করতে চাই। আমার বর্তমান স্ক্রিপ্টটি আমি যা চাই তা করতে চাইলে এতে সাবফোল্ডার রয়েছে। যাইহোক, যদি কোনও সাবফোল্ডার না থাকে তবে এটি তাদের একই ফোল্ডারে পৃথকভাবে তালিকাভুক্ত করে যা বিভ্রান্তিকর হবে কারণ আমার সেগুলি কী তা জানতে হবে।
আনজিপ ফোল্ডারের কাঠামোর আগে :
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
ls
।