Możesz zmienić nazwę pliku (katalogu lub cokolwiek), korzystając tylko ze znajomości i-węzła find
, ale jeśli (a) system plików zawierający go nie jest zamontowany lub jeśli (b) istnieje inny system plików zamontowany w niepustym katalogu, który zawiera interesujący cię plik, plik po prostu nie jest dostępny dla twojego systemu. W przypadku (a) musisz zamontować system plików, zanim będziesz mógł cokolwiek zrobić z zawartością, w tym zmienić jego nazwę, aw przypadku (b) musisz odmontować system plików, który jest zamontowany „nad” katalogiem zawierającym plik, którego nazwę chcesz zmienić. Wygląda na to, że pytasz o przypadek (b).
Jeśli dobrze cię rozumiem, starasz się, aby twój stary /home
katalog (który znajduje się na głównej partycji) był dostępny, wciąż korzystając z nowej partycji zamontowanej na /home
. Jeśli tego chcesz, wykonaj następujące czynności:
Zamknij wszystkie pliki i wyloguj się. Następnie zaloguj się jako root
(użyj do tego wirtualnego terminala - naciśnij Ctrl-Alt-F2) Uruchom następujące polecenie:
umount /home
mv /home /home-old
mkdir /home
mount -a
ls /home
ls /home-old
Jeśli wszystko jest w porządku, wyloguj się i zaloguj ponownie jako Ty i wszystko powinno być w porządku.
Nawiasem mówiąc, polecenie zmiany nazwy pliku przy użyciu tylko wiedzy o jego i-węźle (zakładając, że plik znajduje się w bieżącym katalogu) to:
find . -maxdepth 1 -inum 123456789 -exec mv {} mynewname \;
Gdzie 123456789
oczywiście jest numer i-węzła. (Zauważ, że find
określa nazwę pliku i jego ścieżkę i przekazuje te informacje do mv
; nie ma żadnego sposobu, aby zmienić nazwę pliku bez angażowania istniejącej nazwy pliku w jakikolwiek sposób, ale jeśli tylko nie znasz nazwy pliku, jest to dość prosty.)
mv
w żaden sposób nie zaakceptuje i-węzłów.W typowym systemie plików Uniksa przeniesienie pliku na podstawie i-węzła jest zasadniczo niemożliwe. Powodem jest to, że zmiana nazwy pliku oznacza usunięcie wpisu katalogu z katalogu, który go zawiera, i utworzenie katalogu w innym miejscu. Ale i-węzeł nie zawiera wskaźnika do pozycji katalogu, zawiera tylko (wskaźniki) metadane pliku (znaczniki czasu, uprawnienia itp.) I zawartość pliku.
W przypadku pliku z wieloma dowiązaniami stałymi, którego z nich chciałbyś zmienić? I-węzeł to za mało informacji.
W przypadku katalogu, w niektórych systemach plików, możliwe byłoby działanie z uwzględnieniem samego i-węzła:
..
. To wskazuje na katalog nadrzędny.Rodzi to jednak kilka założeń:
..
w ogóle istnieje? Zależy to od typu systemu plików. Niektóre systemy plików mają wyraźny wpis..
; dla innych wpisy te sfałszowane są przez sterownik systemu plików. Jeśli..
nie istnieje, takie podejście jest zasadniczo niemożliwe...
łącza, istnieje jeszcze jedna przeszkoda, która może nie być oczywista: krok 1 może być możliwy w jądrze, ale nie ma dla niego interfejsu. Wiele wariantów uniksowych nie ma interfejsu, który umożliwia otwieranie pliku za pomocą jego i-węzła, ponieważ pomija to uprawnienia. Na przykład plik z uprawnieniamirwxr-xr-x
(tj. Do odczytu na świecie), który znajduje się w katalogu z uprawnieniamirwx------
(tj. Dostępny tylko dla jego właściciela), nie jest dostępny dla nikogo oprócz właściciela katalogu. Nie można tego ustalić na podstawie samego i-węzła - plik może być faktycznie dostępny za pośrednictwem innego twardego łącza!Rezultatem jest to, że nie, nie można nic zrobić, w tym zmienić nazwy, z plikiem, który ma tylko swój i-węzeł. Musisz mieć ścieżkę do pliku.
Jedynym praktycznym sposobem działania na pliku, biorąc pod uwagę jego i-węzeł, jest najpierw znalezienie ścieżki, na przykład za pomocą
find -inum
, a następnie użycie ścieżki do działania. Nie pomaga to w sytuacji, gdy plik jest zacieniony przez punkt montowania. Nie ma przenośnego sposobu na dostęp do plików zacieniowanych przez punkt montowania; w Linuksie, jak odkryłeś, możesz użyć wiązania bind.źródło
Dziękuję Ci. To było najbardziej pomocne. Pozwala mi to na zmianę nieporęcznych nazw transkrypcji plików wideo pobranych z YouTube na bardziej zwięzłe, ale wciąż znaczące nazwy plików. Na przykład:
... daje mi pliki:
Uważam to za wadę bardzo przydatnego skądinąd.
Mogę zmienić nazwę drugiego pliku w następujący sposób:
... daje mi to listę plików wraz z numerem i-węzła na samym początku:
... wtedy biegam:
Mój skrypt powłoki mvi bash to:
źródło
mvi
skrypt używa zmiennych niecytowanych, co oznacza, że zakończy się niepowodzeniem, jeśli którykolwiek z argumentów podanych w skrypcie zawiera znaki spacji (lub potencjalnie również wtedy, gdy zawierają znaki globowania).