Если я запускаю эту команду, find $HOME/MySymlinkedPath -name "run*.sh"
ничего не происходит и не выдает ошибки («MySymlinkedPath» - это символическая ссылка на другой жесткий диск, отличный от моего $ HOME).
Это также не помогает:
find ~/MySymlinkedPath -name "run*.sh"
find /home/MyUserName/MySymlinkedPath -name "run*.sh"
И просто чтобы убедиться, что этот несуществующий путь не работает (конечно), find $HOME/MySymlinkedPathDUMMYTEST -name "run*.sh"
поэтому путь находится find
в поиске (потому что такой ошибки не происходит), но не выполняет поиск по нему, и я сейчас совершенно не в курсе .
Это работает, только если я cd $HOME/MySymlinkedPath
сначала удалю ссылку на путь, как это, find -name "run*.sh"
но это плохо для моих сценариев.
Дополнительная информация :
эта команда работает как обычно ls $HOME/MySymlinkedPath/run*.sh
, и если я пойду туда cd $HOME/MySymlinkedPath
и запусту ее, ls ..
результат будет не тем, что я ожидал - список пути, где расположен символьный путь, - он возвращает список реального пути на другой медиа / жесткий диск !!!
pwd -P
/media/MediaIdentifier/RealPath
pwd
/home/MyUser/MySymlinkedPath
Переосмысление :
это проблема с find
и ls
или с моей системой? или это ожидается и не проблема вообще ?? Я на Ubuntu 12.10. Это терпит неудачу на всех терминалах, которые я проверял, таким образом, не кажется терминальной "проблемой".
Ответы:
Вот ответ. Но этот вопрос указывает на bash как на цель проблемы.
Объяснение тому, что
find
находит"$HOME/MySymlinkedPath"
. Это символическая ссылка, а не каталог, поэтому рекурсивный спуск на этом останавливается. Если выражение соответствует"$HOME/MySymlinkedPath"
(например, infind "$HOME/MySymlinkedPath" -name 'My*'
), тоfind
выведите его как соответствующее.Как указывалось выше, я обнаружил, что самый простой / чистый способ справиться с этим и исправить все сценарии, а не:
просто добавьте косую черту, чтобы она
find
начиналась не с символической ссылки, а с цели символической ссылки:В качестве альтернативы, передайте
-H
параметрfind
(обратите внимание, что он должен идти первым, перед путями), чтобы сообщить ему о прохождении символических ссылок, передаваемых в его командной строке. (Это отличается от того,-L
что предписываетfind
проходить символические ссылки, встречающиеся также во время рекурсивного спуска.)И, наконец, это сработало лучше всего
-L
(из-за нескольких файловых систем, которые я вставил в папки). Но он генерирует множество проблемных сообщений об ошибках, поэтому я добавил2>/dev/null
; а также решил создать этот псевдонимalias find='find -L'
:источник