Czasami denerwujące jest uzyskanie dostępu do katalogu z nazwą folderu. Powiedz, że mam katalog o nazwie a b c d
. Czy oprócz użycia Tabjest jakiś sposób na uzyskanie dostępu do folderu bez wpisywania nazwy katalogu?
Wiem, że Linux ma unikalny identyfikator każdego konkretnego pliku. Czy mogę tego użyć, aby uzyskać dostęp do folderu? Nie wiem, czy da się to właściwie zrobić, ani jak to zrobić.
Myślę, że kiedy Linux implementuje system plików, porównuje unikalność dwóch nazw katalogów. Dlatego każdy katalog musi być unikalny w spacji. Ale myślę, że to jest jak klucz podstawowy w systemie baz danych. Czy klucz podstawowy to nazwa katalogu, czy istnieje jakiś inny unikalny identyfikator (być może niektóre liczby przechowywane „pod maską”)?
Spróbuj myśleć o tym jak o procesie. Wykonanie polecenia ps
na terminalu powoduje wyświetlenie listy procesów z nazwą i numerem każdego procesu. Musisz wywołać ten proces za pomocą numeru procesu. Podobnie, czy istnieje numer dla katalogu, aby można było wywołać katalog z jego numerem zamiast wywoływać go z jego nazwą?
Po dalszym dochodzeniu odkryłem, że każdy katalog ma unikalny inode
. Jednak jak dotąd nie znalazłem żadnego wbudowanego polecenia dostępu do katalogu inode
.
źródło
zsh
zamiastbash
cd $(icd XXXX)
--- po prostu przepisałeś tęfind
część. Teraz Twoim kolejnym zadaniem jest ... sprawdzenie, co jest bardziej wydajne, programu lubfind
:-P.Odpowiedzi:
Rozwiązanie wykonane przez OP
Nie znaleziono tu wbudowanego polecenia. Ale w końcu jestem w stanie napisać program C do korzystania z cd (wywołaj mój program icd == (inode cd)), aby wejść do folderu przy użyciu wartości i-węzła. Tutaj zamieszczam surowy kod.
Ale tutaj mam do czynienia z podstawowym problemem. Podczas kodowania wykonanie kodu C z bash potrzebnego do utworzenia procesu potomnego w ramach procesu bash (proces nadrzędny). W procesie potomnym przestrzeń katalogu jest nowa i nie mogę uzyskać dostępu do przestrzeni katalogu procesu nadrzędnego. Nic więc nie da się zrobić poza wywołaniem nowego okna bash. W przyszłości postaram się wdrożyć nową funkcję karty, jeśli ludzie będą to zainteresowani. Ale wierzę, że spotkałem się z dużą krytyką za to. Więc ludzie mogą nie być zainteresowani. Właśnie zrobiłem to dla mojej rozrywki.
Udostępniono tutaj kod RAW,
Używam tutaj terminalu gnome. Oczywiście w przypadku innych dystrybucji kod zostanie zmieniony.
źródło
Każda jednostka w (większości) systemach plików w systemie Linux ma unikalny identyfikator o nazwie
inode
. Zauważ, że plik może mieć więcej niż jedną nazwę ( hardlink ), ale katalogi mają tylko jedno łącze we wszystkich systemach plików, które znam. Zauważ, że koncepcja i-węzła jest lokalna dla systemu plików, więc w dwóch różnych urządzeniach (partycji lub czymkolwiek) unikalność nie jest gwarantowana.Możesz zobaczyć i-węzeł swojego katalogu za pomocą
ls -ldi
:Więc wiesz, że twój katalog ma i-węzeł 20873234. Teraz możesz przejść do niego za pomocą polecenia:
(Należy pamiętać, że
2> /dev/null
ma to na celu zamknięcie komunikatów o błędach dotyczących nieczytelnych katalogów na ścieżce).To polecenie przeskanuje cały katalog domowy, więc bądź cierpliwy. 1
Ale co z używaniem
cd
i uzupełnianiem TAB twojej powłoki?1. To musi być najbardziej 2 nieefektywne rzeczą, jaką kiedykolwiek pisał ... odą do entropii. Powodem jest to, że „klucz podstawowy”, pod którym dostęp do pliku lub katalogu jest zoptymalizowany, szybki i bezpośredni to - zgadnij co? - nazwa ścieżki:
/dir/dir/file_or_dir
. Co więcej, aby zapewnić ci dostęp do danego katalogu, system musi sprawdzić wszystkie uprawnienia na ścieżce ... tak więc dostęp przez i-węzeł oznacza skanowanie rekursywne systemu plików.2. Cóż, możesz pogorszyć sytuację, skanując z
/
. 3)3. Ale to nie zadziała, ponieważ i-węzły są unikalne tylko dla systemu plików (dla montowania).
źródło
/dir/dir/file_or_dir
. Twój program C również będzie musiał przeskanować system plików ifind
został zoptymalizowany w ciągu ostatnich 40 lat ... wciąż --- dlaczego? Jeśli potrzebujesz skrótu, użyj,a="/my/really/strange and long/dir path name/"
a następniecd "$a"
. Nie mogę tego przebić. Lub użyj dowiązań symbolicznych.Możesz Tabobrócić dostępne foldery zamiast je wyświetlać. Edytuj plik
~/.inputrc
i dodajJeśli chcesz dla wszystkich użytkowników, edytuj
/etc/inputrc
zamiast tego.Naciśnij Ctrl+ xi Ctrl+, raby było skuteczne.
Teraz użyj,
cd
Tababy przejść do folderu bez wpisywania jego nazwy.cd
Shift+ Tabobróci się w innym kierunku.Warto pamiętać, że
cd -
zabierze Cię do ostatnio odwiedzanego folderu.źródło
Możesz używać symboli wieloznacznych powłoki.
Na przykład mogę
lub
I rozszerzy symbole wieloznaczne do rzeczywistej nazwy i przejdzie do tego katalogu. Zakładając, że jest to jedyny zgodny katalog.
Jeśli masz zarówno
a b c d
aa1b2c3d
, a następniecd a?b?c?d
wzrośnie do jednejcd a1b2c3d a b c d
lubcd a b c d a1b2c3d
(rzeczywista kolejność zależy od jądra, systemu plików, ...), a bash będzie cicho przenieść się do pierwszej ścieżki.Z drugiej strony często nie masz folderów o podobnej nazwie, więc
a*d
wystarczy coś takiego , aby je rozwinąć bez konieczności wpisywania wszystkich znaków pośrednich. Jest to szczególnie przydatne, gdy nie możesz go wpisać (np. Nazwy są w innym skrypcie, a nawet w innym kodowaniu), a w innym przypadku konieczne byłoby kodowanie ósemkowe nazwy pliku.źródło
Możesz znaleźć ten katalog w menedżerze plików, np. Nautilus, po prostu przeciągnij go i upuść na terminalu.
Jeśli wcześniej wpiszesz
cd
terminal, otrzymasz polecenie.źródło
Nie jestem pewien, czy dokładnie o to prosisz, ale
zsh
ma kilka fajnych sztuczek, aby uzyskać dostęp do katalogu w inny sposób niż wpisanie ścisłej nazwy katalogu; po pierwsze możesz wpisać część nazwy, która zostanie rozwinięta do pełnej nazwy katalogu, co pozwala na bardzo przydatne rzeczy, na przykład:Uderzenie TAB...
źródło
Najprostszym sposobem jest dwukrotne kliknięcie nazwy katalogu (zakładając, że jest ona widoczna na ekranie), a następnie wpisz cd, a następnie spację i kliknij przycisk kółka myszy, a skopiuje i wklei podświetloną nazwę katalogu. Naciśnięcie klawisza enter spowoduje przejście do wymaganego katalogu.
Cały czas korzystam z tej procedury i nie ogranicza się ona tylko do nazw katalogów. Można go używać do dowolnych poleceń za pomocą wiersza poleceń.
Powodzenia.
źródło
Jeśli jest to tylko jeden lub kilka katalogów, dlaczego nie mieć aliasów w twoim bashrc lub w jakimkolwiek pliku inicjującym? Na przykład:
Następnie, gdy chcesz tam wejść, po prostu wpisz
abc
źródło
Możesz napisać program do utworzenia tabeli skrótów dla wszystkich katalogów systemu operacyjnego. Byłby to w zasadzie program spłaszczania drzew.
Ale wtedy możesz zrobić coś podobnego
hash-cd 32okjv02
i przeszuka tablicę skrótów w32okjv02
celu mapowania do katalogu. i przejdź do swojego katalogu. I byłoby naprawdę szybko, gdy indeksujesz wszystkie katalogi.Będziesz musiał użyć aliasu mkdir, aby wywoływać ten program w każdym nowym katalogu, a może napiszesz polecenie sprawdzania / odświeżania tabeli skrótów, które możesz cron co minutę i przy logowaniu.
źródło