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

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

/usr/myDir / и /home/myDir/

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

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

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

  • Как скопировать строки access.log по времени?
  • Получите список файлов Linux, рекурсивный и прямой вывод в файл
  • Найти файлы, принадлежащие группе
  • Как обратное совпадение строки на языке программирования Vim?
  • Узнайте, когда последний раз обновлялся индекс
  • Grep строка из того же файла в нескольких файлах .tar.gz
  • Как использовать результаты «файла» (Имя приложения: Microsoft Word) для поиска определенной строки?
  • Как скопировать содержимое файлов из поиска в командной строке в один файл?
  • 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 найдет то, что основной системный вызов для файловой системы возвращается первым.

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