Saya memiliki berbagai file zip yang berisi subfolder dan tidak ada subfolder. Saya ingin mengekstrak semua zip ke foldernya. Script saya saat ini melakukan apa yang saya inginkan jika mengandung subfolder. Namun, jika tidak ada subfolder, daftar mereka secara terpisah di folder yang sama yang akan membingungkan karena saya perlu tahu apa itu.
Sebelum unzip struktur folder :
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
Setelah unzip struktur folder :
- KDY231-8000018
- KGC30-0152537
- S330V-0034006
- file_1.txt
- file_2.txt
- file_3.txt
Skrip saat ini
#!/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;
Pemikiran saya adalah bahwa zip yang tidak memiliki subfolder, saya perlu membuatnya dari fileName.zip dan bukan dari file_1.txt karena namanya tidak masuk akal. Dengan demikian, hasil akhir akan menjadi struktur ini setelah membuka ritsleting.
Final mengharapkan struktur folder unzip :
- KDY231-8000018
- KGC30-0152537
- S330V-0034006
- XZC605-0002319
Diperbarui: Kode ini disediakan oleh @confetti works. Terima kasih. Ada struktur file zip lain yang saya lupa sebutkan dan saya telah memasukkan di atas. Ini kode terakhir dengan suntingan saya. Ini mungkin bukan kode yang efisien, tetapi sepertinya berhasil bagi saya.
#!/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
.