Где первая команда поиска выглядит, если есть каталоги с тем же именем?

Предположим, у меня есть два разных каталога с одинаковыми именами папок:

/usr/myDir / и /home/myDir/

Если я запустил команду, например:

cd $(find / -type d -name myDir)

он переходит в /usr/myDir . Почему это? Где первая команда поиска выглядит, когда речь идет о специальных экземплярах вроде этого?

  • Найти файлы, принадлежащие группе
  • Найти строки в файле1, количество экземпляров в файле2
  • bash - выделение прописных слов
  • Как найти определенные файлы и переместить их в новый каталог в той же команде?
  • Как найти сеанс ssh, процесс был начат с
  • Искать значение только в одном столбце wo с помощью awk, sed или perl
  • Заменить очень длинную строку в файлах рекурсивно
  • Как удалить сообщения об ошибках при поиске рекурсивно для строки?
  • 2 Solutions collect form web for “Где первая команда поиска выглядит, если есть каталоги с тем же именем?”

    find файлы траверс в любом порядке, возвращаемом файловой системой. Этот порядок не предсказуем; создание, удаление или переименование файла может изменить порядок других файлов в том же каталоге.

    Это find / -type d -name myDir , что find / -type d -name myDir возвращает /usr/myDir или /home/myDir , и это может измениться в любое время. (В этом конкретном примере он, вероятно, не будет меняться часто, потому что редко можно писать в корневой каталог, но в целом не рассчитывайте на него.)

    В некоторых оболочках (включая bash) команда cd игнорирует все, кроме своих первых аргументов, поэтому ваша команда молча изменяет рабочий каталог на то, что сначала возвращает. (Ваша команда также не будет работать для пути, содержащего пробелы .) В других оболочках (таких как ksh и zsh) вы получите сообщение об ошибке.

    Есть два вопроса; как cd ведет себя, что легко проверить через:

     bash-4.1$ mkdir first second bash-4.1$ cd first second bash-4.1$ pwd /home/jdoe/first bash-4.1$ 

    Таким образом, cd для этой оболочки переходит к первому найденному элементу. Во-вторых, find себя может или не может быть какая-либо сортировка результатов, а для каталогов (возможно) есть только опция -d или «найти сначала по глубине», которая вернет /some/deeper/dir перед /some или / , Таким образом, вы getdents(2) с тем, что возвращает системный вызов, getdents(2) из быстрого find в Linux. Эти записи не должны считаться отсортированными в определенном порядке (если только что-то вроде ls сортирует их для вас):

     bash-4.1$ mkdir c ; sleep 5 bash-4.1$ mkdir b ; sleep 5 bash-4.1$ mkdir a ; sleep 5 bash-4.1$ find . . ./b ./c ./a 

    Если вы сомневаетесь, вам нужно будет выполнить какую-то сортировку по результатам, так как по умолчанию find найдет то, что основной системный вызов для файловой системы возвращается первым.

    Interesting Posts

    Печать определенных полей каждой строки до тех пор, пока не будет обнаружен маркер, а затем напечатайте целые строки до конца файла

    Чтение пространства в качестве входного файла в сценарии оболочки

    Linux Mint 13 Xfce – используйте Super_L в нескольких ярлыках

    генерировать согласованный уникальный идентификатор машины

    Проверить, что процесс уже запущен в webfaction?

    Настройка PPTP VPN-соединения без GUI

    Как узнать, подключен ли процесс к интерфейсу крана?

    Ядро 4.12.3 не взаимодействует с bcmwl-kernel-source (Mint 18.2)

    Как интегрировать Request Tracker 4.0 с Open LDAP в Debian?

    Драйвер графической подсистемы Intel для Linux Mint 17

    Неправильное кодирование имени файла в KDE, но верно в GTK / tty1 /

    максимум столбца с совпадающим идентификатором

    Улавливание портов Iptables

    Цвет git grep отличается от пользовательских цветов grep

    Как получить «нулевое время простоя» на HAProxy с конфигурацией балансировки нагрузки?

    Linux и Unix - лучшая ОС в мире.