Mala alatka za analizu sadržaja usb flash memorija i diskova

Mali zenity GUI koji sam napravio. Može da pokaže koje se sve vrste fajlova nalaze na USB Flash memorijama i diskovima.
U suštini, i nije baš nešto preterano koristan skript. :smiley:

[CODE]#!/bin/bash

A tool to analyze the usb drive content

Milos Pavlovic, 2015

This program is free software; you can redistribute it and/or modify it

under the terms of the GNU General Public License as published by

the Free Software Foundation; either version 2 of the License, or

(at your option) any later version.

This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with this program; if not, write to the Free Software

3 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,

MA 02110-1301, USA.

Make temporary file

list=$(mktemp /tmp/XXXXXX)

get a list of devices

devs=ls -al /dev/disk/by-path/*usb*part* 2>/dev/null | awk '{print($11)}'
if [[ ${?} != 0 || -z ${devs} ]]
then
zenity --warning --text “No USB drive plugged in!”
rm $list
exit
fi

Initialize list and make sure it is empty

$list

Now get the info about our devices and put it in a list

for dev in $devs; do dev="${dev##*/}";

Check if device is mounted

This way unmounted devices will not be in the list

grep -qs “/dev/${dev}” /proc/mounts
if [[ ${?} = 0 ]]
then
echo “FALSE” >> $list;
echo “/dev/$dev” >> $list;
echo cat /sys/block/${dev:0:3}/device/vendor 2>/dev/null >> $list;
echo cat /sys/block/${dev:0:3}/device/model 2>/dev/null >> $list;
echo lsblk 2>/dev/null | grep \echo -E ${dev}` | awk ‘{print($4)}’ B >> $list; echo lsblk 2>/dev/null | grep `echo -E ${dev}` | cut -c 37- >> $list; echo -nlsblk -o NAME 2>/dev/null | grep `echo -E ${dev}`| awk ‘{print($2)}’ >> $list; df -Techo -E /dev/${dev}2>/dev/null | tail -1 | awk '{print $2}' >> $list; echols -l /dev/disk/by-uuid/ 2>/dev/null | grep `echo -E ${dev}` | awk ‘{print($9)}’ ` >> $list;
fi
done

Check if the list is empty

if [[ ! -s ${list} ]]
then
zenity --warning --text=“No USB drive mounted!” --timeout=10
rm $list
exit 0
fi

clear array

devfs=()

Read in the array using a line tmp variable

while read -r line
do
devfs+=("$line")
done < $list

rm $list
unset list

#Display the main dialog
disktmp=$(zenity --list --text=“Select your USB drive from the list and click OK to begin.\nOnly mounted usb drives are shown here.\nThis will calculate what file types you have on the drive and how much space do they consume.\nThe speed of this process depends on the drive size and on the number of files.” --radiolist --width=650 --height=350 --column=“Pick” --column=“Dev” --column=“Vendor” --column=“Model” --column=“Size” --column=“Mount” --column=“FS” --column=“UUID” “${devfs[@]}”)

#Test for cancellation
if [[ ${?} != 0 ]]
then
exit 0
fi

#Check if anything was selected
echo ${disktmp} | grep ^[/] &>/dev/null
if [[ ${?} != 0 ]]
then
zenity --info --text=“Nothing was selected!\nStart again and select a USB drive.” --timeout=10
exit 0
fi

Extract device

disk=${disktmp:5:4}

check if device is on the mount list again, just to be sure

grep -qs “/dev/${disk}” /proc/mounts
if [[ ${?} != 0 ]]
then
zenity --info --text=“Device /dev/$disk is not mounted!” --timeout=10
exit 0
fi

Start finding file types and file sizes and convert bytes to human readable

{
echo “#Please wait, this may take a while\nDepending on the drive content”
find “$(echo lsblk 2>/dev/null | grep \echo -E ${disk}` |cut -c 37- `)” -type f -exec file -b ‘{}’ ; -printf ‘%s\n’ | awk -F , ‘NR%2 {i=$1} NR%2==0 {a[i]+=$1} END {for (i in a) printf("%12u %s\n",a[i],i)}’ | sed -e ‘s/^[ \t]//’ > ~/usbinform
echo “#Calculating File size”
awk ‘{print $1}’ ~/usbinform | awk ‘{ sum=$1 ; hum[10243]=“GiB”;hum[10242]=“MiB”;hum[1024]=“KiB”; for (x=10243; x>=1024; x/=1024){ if (sum>=x) { printf “%.2f %s\n”,sum/x,hum[x];break } if (sum<1024) {printf sum" bytes\n";break } }}’ > ~/usbinform1
awk ‘{print $1}’ ~/usbinform | awk '{ sum=$1 ; hum[1000
3]=“GB”;hum[10002]=“MB”;hum[1000]=“KB”; for (x=10003; x>=1000; x/=1000){ if (sum>=x) { printf “%.2f %s\n”,sum/x,hum[x];break } if (sum<1000) {printf sum" bytes\n";break } }}’ > ~/usbinform2
sed -i 's/\w
.//’ ~/usbinform
} | zenity --progress --pulsate --auto-close || exit

Display results

paste -d’\n’ ~/usbinform2 ~/usbinform1 ~/usbinform | zenity --list --title="${disk}" --column=“Size” --column=“Size KiB” --column=“Description” --width=800 --height=650 --ok-label=“Save” --cancel-label=“OK” --text=“Drive ${disk} Storage Summary\n1KB=1000 bytes, 1KiB=1024 bytes”

#Test for cancellation
if [[ ${?} != 0 ]]
then
rm ~/usbinform
rm ~/usbinform1
rm ~/usbinform2
exit 0
fi

#Ask where to save our file
zNewData=$(paste -d’\t’ ~/usbinform2 ~/usbinform1 ~/usbinform)
zSavePath=$(echo -n “$(zenity --file-selection --save --confirm-overwrite --filename=“USBdrive_summary.txt” --title=“Save USB drive info”)”)

#Test for cancellation
if [[ ${?} != 0 ]]
then
rm ~/usbinform
rm ~/usbinform1
rm ~/usbinform2
exit 0
fi

#save
paste -d’\t’ ~/usbinform2 ~/usbinform1 ~/usbinform > “$zSavePath”

Remove temp files

rm ~/usbinform
rm ~/usbinform1
rm ~/usbinform2
exit
[/CODE]