Strona główna Ubuntu C++ Hardware HTML i javascript Java Software SQL

Awk|Bash – wypakowywanie plików z archiwum rar i ich automatyczne usuwanie.

Dodano: 2012-10-26

W przypadku pobierania plików w formacie archiwum *.rar można go rozpakować za pomocą komendy unrar. Można także stworzyć skrypt, który automatycznie przeszuka folder, w celu wykrycia wszystkich plików z rozszerzeniem rar i rozpakuje je z równoczesnym usunięciem archiwum, jeżeli operacja zakończy się powodzeniem.

Skrypt poniżej przyjmuje jeden parametr, który określa ścieżkę do folderu, który ma zostać przeszukany w celu znalezienia wszystkich plików archiwum rar. Jeżeli nie zostanie podany parametr, zostanie przeszukany folder, w którym skrypt się znajduje.

Przykład użycia:

./unrarb.bash /home/user/Downloads

#!/bin/bash

echo "The script extract files from rar archives and delets them, after operation completes successfully.";


if [ "$1" = ""  ]; then
	DEST=`pwd`"/";
else
	if [ ! -d $1 ]; then
		echo "";
		echo "The argument \""$1"\" is not directory!!!";
		echo "";
		exit 1;
	fi;
	DEST=$1"/";
fi;

echo "Start working in: \""$DEST"\"";

for FF in $DEST*; do
	echo `basename "$FF"` | awk 'BEGIN{}{		
		extr = 0;
		if (substr($0, length($0)-3, 4) == ".rar"){
			if (index($0, ".part1.rar") != 0){
				extr = 2;
			} else if (index($0, ".part") == 0)
				extr = 1;

			if (extr != 0){
				print "Extracting file: \""$0"\"";
				system("unrar x -o+ '"$DEST"'"$0" '"$DEST"';");
				if (extr == 1)
					system("if [ \"$?\"  -eq \"0\" ]; then rm \"'"$DEST"'"$0"\"; fi;");
				else {
					for (i=1; ;i++){
						files=substr($0, 0, index($0, ".part"));
						files=files".part"i".rar";
						if (system("[ -f \"'"$DEST"'"files"\" ]") == 0)
							system("if [ \"$?\"  -eq \"0\" ]; then rm \"'"$DEST"'"files"\"; fi;");
						else
							break;
					}		
				}
			}
		}
	}';
done;

echo "";
echo "End script.";