Иногда раздражает доступ к каталогу с именем папки. Скажем, у меня есть каталог с именем a b c d
. Помимо использования Tab, есть ли способ получить доступ к папке без ввода имени каталога?
Я знаю, что у Linux есть уникальный идентификатор для каждого конкретного файла. Могу ли я использовать это для доступа к папке? Я не знаю, можно ли это сделать на самом деле или как это сделать.
Я думаю, что когда Linux реализует файловую систему, он сравнивает уникальность двух имен каталогов. Таким образом, каждый каталог должен быть уникальным в пространстве. Но я думаю, что это как первичный ключ в системе баз данных. Является ли первичный ключ именем каталога или существует какой-то другой уникальный идентификатор (возможно, некоторые числа хранятся «под капотом»)?
Попробуйте думать об этом как о процессе. Если вы выполняете команду ps
на терминале, он выводит список процессов с именем и номером каждого процесса. Вы должны вызвать этот процесс с номером процесса. Точно так же, есть ли номер для каталога, чтобы вы могли вызывать каталог с его номером вместо того, чтобы называть его по имени?
При дальнейшем расследовании я обнаружил, что каждый каталог имеет уникальный inode
. Тем не менее, я до сих пор не нашел ни одной встроенной команды для доступа к каталогу inode
.
источник
zsh
вместоbash
cd $(icd XXXX)
--- вы просто переписали этуfind
часть. Теперь ваша следующая задача ... проверить, что более эффективно, ваша программа илиfind
:-P.Ответы:
Решение от OP
Здесь не найдена встроенная команда. Но, наконец, я могу написать C-программу для использования cd (давайте вызовем мою программу icd == (inode cd)) для входа в папку с использованием значения inode. Здесь я размещаю сырой код.
Но есть фундаментальная проблема, с которой я столкнулся здесь. При выполнении кодирования C-код из bash необходим для создания дочернего процесса в bash-процессе (родительском процессе). От дочернего процесса пространство каталога новое, и я не могу получить доступ к пространству каталога родительского процесса оттуда. Так что ничего нельзя было сделать, кроме как вызвать новое окно bash отсюда. В будущем я постараюсь реализовать новую функцию вкладок, если люди заинтересованы в этом. Но я считаю, что я столкнулся с большой критикой за это. Таким образом, люди могут быть не заинтересованы. Я только что сделал для моего развлечения.
RAW код доступен здесь,
Я использую терминал гнома здесь. Очевидно, что для других дистрибутивов код будет изменен.
источник
Любой объект в (большинстве) файловых систем в Linux имеет уникальный идентификатор, называемый
inode
. Обратите внимание, что файл может иметь более одного имени ( жесткая ссылка), но каталоги имеют только одну ссылку во всех файловых системах, о которых я знаю. Обратите внимание, что концепция inode является локальной для файловой системы, поэтому уникальность двух разных устройств (разделов и т. Д.) Не гарантируется.Вы можете увидеть индекс вашего каталога с помощью
ls -ldi
:Итак, вы знаете, что в вашем каталоге есть индекс 20873234. Теперь вы можете переключиться на него с помощью команды:
(Обратите внимание, что
2> /dev/null
это закрывает сообщения об ошибках о нечитаемых каталогах по пути.)Эта команда просканирует весь ваш домашний каталог, так что наберитесь терпения. 1
Но как насчет использования
cd
и TAB-завершения вашей оболочки?1. Это должно быть наиболее 2 неэффективен вещькоторую я когдалибо писал ... ода энтропии. Причина в том, что «первичный ключ», по которому доступ к файлу или каталогу оптимизирован, быстрый и прямой, - угадайте, что? - имя пути:
/dir/dir/file_or_dir
. Более того, чтобы предоставить вам доступ к определенному каталогу, система должна проверить все разрешения в пути ... так что, опять же, доступ через inode означает рекурсивное сканирование файловой системы.2. Ну, вы можете сделать хуже, отсканировав из
/
. 33. Но тогда это не будет работать, потому что inode уникальны только для файловой системы (для монтирования).
источник
/dir/dir/file_or_dir
. Вашей C-программе тоже нужно будет сканировать файловую систему, иfind
она была оптимизирована в течение последних 40 лет ... до сих пор - почему? Если вам нужен ярлык, используйтеa="/my/really/strange and long/dir path name/"
и затемcd "$a"
. Не могу победить. Или используйте символические ссылки.Вы можете Tabвращать доступные папки вместо того, чтобы перечислять их. Отредактируйте файл
~/.inputrc
и добавьтеЕсли вы хотите это для всех пользователей, отредактируйте
/etc/inputrc
вместо этого.Нажмите Ctrl+ xи Ctrl+, rчтобы сделать его эффективным.
Теперь используйте
cd
Tabдля перехода к вашей папке, не записывая ее имя.cd
Shift+ Tabбудет вращаться в другом направлении.Стоит помнить, что
cd -
вы попадете в последнюю посещенную папку.источник
Вы можете использовать подстановочные знаки оболочки.
Например, я могу сделать
или
И это расширит подстановочные знаки до фактического имени и изменится на этот каталог. Предполагая, что это единственный каталог, который соответствует.
Если у вас есть оба,
a b c d
иa1b2c3d
, тоcd a?b?c?d
расширится до одногоcd a1b2c3d a b c d
илиcd a b c d a1b2c3d
(фактический порядок будет зависеть от ядра, файловой системы ...), и bash молча перенесет вас на первый путь.С другой стороны, у вас часто нет папок с одинаковыми именами, поэтому
a*d
достаточно расширить что- то подобное , чтобы не вводить все промежуточные символы. Это особенно полезно, когда вы на самом деле не можете набрать его (например, имена находятся в другом скрипте или даже в другой кодировке), и в противном случае вам бы пришлось восьмерично кодировать имя файла.источник
Вы можете найти этот каталог в файловом менеджере, например, nautilus и просто перетащить его в терминал.
Если вы ранее набрали
cd
в терминале, вы получите команду.источник
Не уверен, что это именно то, о чем вы просите, но
zsh
есть некоторые хитрые приемы для доступа к каталогу другими способами, чем ввод строгого имени каталога; например, вы можете ввести часть имени, и оно расширится до полного имени каталога, что позволяет делать очень полезные вещи, например:Удар TAB...
источник
Самый простой способ - дважды щелкнуть имя каталога (при условии, что оно видно на экране), затем введите cd, затем пробел и нажмите кнопку колесика на вашей мыши, и он скопирует и вставит выделенное вами имя каталога. Нажатие клавиши ввода изменится на требуемый каталог.
Я использую эту процедуру все время, и она не ограничивается только именами каталогов. Может использоваться для любых команд, использующих командную строку.
Удачи.
источник
Если это просто один или несколько каталогов, почему бы не иметь псевдонимы в вашем bashrc или любых других файлах инициализации? Например:
Тогда всякий раз, когда вы хотите пойти туда, просто введите
abc
источник
Вы можете написать программу для создания хеш-таблицы для всех ваших каталогов ОС. В основном это будет программа выравнивания деревьев.
Но тогда вы могли бы сделать что-то вроде этого,
hash-cd 32okjv02
и он сделал бы поиск по хеш-таблице для32okjv02
отображения в каталог. и перейти к вашему каталогу. И это будет очень быстро, как только вы каталогизируете все свои каталоги.Вам нужно было бы использовать псевдоним mkdir для вызова этой программы в каждом новом каталоге и, возможно, написать команду проверки / обновления хеш-таблицы, которую вы могли бы выполнять каждую минуту и при входе в систему.
источник