Strona 1 z 1

Pytanie o parted i fdisk

: 17 marca 2014, 17:02
autor: kodama
Hej
Czy da się wyciągnąć z parteda linijkę taką jak z fdiska? W sensie już mówię o co mi chodzi: chcę sobie wyszukać partycje NTFS na wszystkich podłączonych do komputera dyskach czyli robię:

Kod: Zaznacz cały

fdisk -l | grep NTFS
/dev/sdc4        56625152   976771071   460072960   17  Ukryta HPFS/NTFS
w wypadku parteda:

Kod: Zaznacz cały

parted -l | grep ntfs
 4      29,0GB  500GB   471GB   primary  ntfs         hidden
 
I świetnie, mamy wynik podobny. Tylko w przypadku fdiska od razu wiem, że to /dev/sdc4 w przypadku parteda - już niekoniecznie i muszę szukać trochę. Jestem w trakcie pisania takiego skryptu do automagicznego wyszukiwania i montowania partycji NTFS i zasadniczo fdisk by wystarczył. Ale (tu oczywiście wchodzi problem) nie radzi on sobie z GPT - stąd konieczność użycia parteda.

Ktoś miałby pomysł jakby to obejść/zmusić parteda do wyświetlania całej ścieżki? Tudzież podpowiedź, żeby zastosować jakieś inne rozwiązanie?

: 17 marca 2014, 17:31
autor: f1.micro
A może tak:

Kod: Zaznacz cały

for i in `fdisk -l | grep "Dysk /" | awk '{print $2}' | sed 's/://g'`
do
twojapartycjantfs=$i`parted $i | grep ntfs | awk '{print $1}'`
done
Tym sposobem otrzymasz wszystkie partycje NTFS nie zależnie od ilości dysków

PS: W zależności od języka będzie "Dysk /" lub "Disk /". Możesz wrzucić przed coś takiego (lub case dla większej ilości języków):

Kod: Zaznacz cały

if [ "$(locale | grep pl_PL)" ]; then
    dysklocale="Dysk /"
else
    dysklocale="Disk /"
fi

: 17 marca 2014, 17:45
autor: f1.micro
Sorki, dla więcej niż jednej partycji

Kod: Zaznacz cały

for i in `fdisk -l | grep "Dysk /" | awk '{print $2}' | sed 's/://g'`
do
    for j in [font=Verdana]parted $i | grep ntfs | awk '{print $1}'`
[/font]    do
         twojapartycjantfs=$i$j
         mount $twojapartycjantfs /katalog
     done
done

: 17 marca 2014, 17:50
autor: kodama
Ok, fajne.
Ja sobie w międzyczasie rozwiązałem to tak:

Kod: Zaznacz cały

partycje=($(file -s /dev/sd[a-z][0-9] | grep NTFS | cut -d ':' -f1)) ;

rozmiar=${#partycje[@]}


    for (( i=0; i<$rozmiar; i++ )) do

        wielkosc=`parted ${partycje[$i]} print | grep ntfs | awk '{ print $4 }'`;
    
        calosc[$i]=`echo ${partycje[$i]} $wielkosc`

    done

  
I wygląda, że nawet działa.

Dzięki za zainteresowanie :)

: 17 marca 2014, 18:51
autor: lessmian2

Kod: Zaznacz cały

parted -l | awk '/Disk/ {split($2, disk, ":")} /ntfs/ {print disk[1]$1}'
;)

: 17 marca 2014, 19:24
autor: kodama
Ano, więc właśnie :) W linuksie to jest fajne, że można sobie jedną rzecz porobić na kilka różnych rzeczy :]
Takie coś sobie porobiłem, jakby ktoś chciał ;)

Kod: Zaznacz cały

#!/bin/bash

red="\e[31m"
green="\e[32m"
reset="\e[0m"


partycje=($(file -s /dev/sd[a-z][0-9] | grep NTFS | cut -d ':' -f1)) ;

	for (( i = 0; i < ${#partycje[@]}; i ++ )) do

		wielkosc=`parted ${partycje[$i]} print | grep ntfs | awk '{ print $4 }'`;
	
		calosc[$i]=`echo ${partycje[$i]} $wielkosc`

	done




	for (( i = 0; i < ${#calosc[@]}; i ++ )) do

read -p "Zamontować partycję: `echo ${calosc[$i]} | awk '{ print " \033[1m" $1 "\033[0m o rozmiarze " $2 }'` [T/N] " odpowiedz </dev/tty


		if [ "$odpowiedz" == "T" ] || [ "$odpowiedz" == "t" ]; then


			part=`echo ${calosc[$i]} | awk '{ print $1 }'`

			testdysku=`cat /proc/mounts | grep "$part"`;


				if [ -n "$testdysku" ]; then

				echo -e "\t Partycja $part jest już zamontowana w $red `cat /proc/mounts | grep "$part" | awk '{ print $2 }'` $reset!";

				else

				cel=`echo ${calosc[$i]} | cut -c6-9`

					if [ ! -d /media/$cel ]; then

					 mkdir /media/$cel

					fi

					mount -t ntfs-3g $part /media/$cel

					echo -e "\t Zamontowano w: $green/media/$cel $reset ";

					echo

				fi

		fi
	echo
done
Działa, pasuje ;]