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
.Jawaban:
Mengujinya dengan file yang mirip dengan struktur yang ditampilkan dan berfungsi sempurna untuk saya.
sumber
./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 <- Tidak ada subfolder./batchUnzip.sh: line 13: [[: XZC605-0002319: value too great for base (error token is "0002319")
| wc -l
belakang perintah find untuk mendapatkan jumlah aktual dari sub-direktori. Saya sudah mengedit jawaban saya. Itu pada dasarnya membandingkan daftar string sub-direktori ke nomor sebelumnya. Eops../$folder/*
dalammv
perintah di bagian bawah. Intinya mencoba memindahkan folder ke dalam dirinya sendiri, eops. Saya sudah mencoba kode saat ini dan berfungsi untuk saya.