Potrzebujesz pomocy z C, C++, perl, python, itp.
kodama
Junior Member
Posty: 633 Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań
Post
autor: kodama » 17 marca 2014, 17:02
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?
f1.micro
Beginner
Posty: 119 Rejestracja: 24 lutego 2009, 11:32
Lokalizacja: Kraków
Post
autor: f1.micro » 17 marca 2014, 17:31
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
f1.micro
Beginner
Posty: 119 Rejestracja: 24 lutego 2009, 11:32
Lokalizacja: Kraków
Post
autor: f1.micro » 17 marca 2014, 17:45
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
kodama
Junior Member
Posty: 633 Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań
Post
autor: kodama » 17 marca 2014, 17:50
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
lessmian2
Member
Posty: 1088 Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków
Post
autor: lessmian2 » 17 marca 2014, 18:51
Kod: Zaznacz cały
parted -l | awk '/Disk/ {split($2, disk, ":")} /ntfs/ {print disk[1]$1}'
kodama
Junior Member
Posty: 633 Rejestracja: 23 maja 2010, 22:30
Lokalizacja: Poznań
Post
autor: kodama » 17 marca 2014, 19:24
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 ;]