Ponieważ chcesz find
działać tylko na urządzeniach blokowych USB, poniżej przedstawiono przykład wykorzystania informacji zgłoszonych przez profil systemu, aby uzyskać punkt montażu dowolnego podłączonego i zamontowanego urządzenia blokowego USB. Robiąc to w ten sposób, nie ma znaczenia, jakie inne punkty montowania istnieją, /Volumes
ani nie ma znaczenia, jak nazywa się nazwa urządzenia blokowego USB, ponieważ jest to ustalone przez program profilujący system, a nie ls
polecenie.
Po raz kolejny zmodyfikowałem kod, usuwając złożony wiersz poleceń, ponieważ prawdopodobnie i tak nie zostanie uruchomiony w ten sposób i jest łatwiejszy do utrzymania w formie skryptu, dodając możliwość obsługi spacji w nazwie etykiety urządzenia bloku USB .
Przez tymczasową zmianę wewnętrznego separatora pola $IFS
dodanie IFS=$'\n'
do skryptu zignoruje przestrzeń (i) jako separator na wyjściu grep
po przekazaniu do find
. Żeby nie mieszać się z żadnym kodem w pozostałej części skryptu, otrzymuję stan, $IFS
a następnie go później przywracam.
W skrypcie bash:
#!/bin/bash
_ifs="$IFS"
IFS=$'\n'
for p in $(system_profiler SPUSBDataType | grep -oE '/Volumes/.*$'); do
if [ -n "$p" ]; then
find "$p"/*
fi
done >> filename.txt
IFS="$_ifs"
system_profiler SPUSBDataType
Informacji wyjść na magistrali USB i rury to przez grep
uzyskać /Volumes/$whatever
np /Volumes/USB Drive
używając -oE
za '/Volumes/.*$'
które wyjścia /Volumes/
i wszystko po nim do końca linii, co '/Volumes/.*$'
przełoży pełną ścieżkę punktu montowania jakichkolwiek zamontowanych urządzeń blokowych USB. Więc niezależnie od tego, jakie urządzenie blokowe USB jest zamontowane, jest przypisane $p
(wybrałem „p” dla ścieżki ), a gdy jest używane z find
dodałem to /*
po, aby nie wysyłało plików dotf . if
Blok jest tam w celu uniknięcia wyjście, jeśli są zamontowane żadne urządzenie blokowe USB.
grep
raz, a teraz, jak napisałem, może zwrócić tylko pełną ścieżkę (nazwy) zamontowanych urządzeń blokowych USB z wyjście programu Profil systemu w jednymgrep
procesie (na urządzenie blokujące USB). Sądzę, że byłem zbyt zmęczony, żeby zobaczyć to wczoraj wieczorem. :)