mam
link -> file
ja robię
find -L . -name 'link'
I dostać
./link
Dlaczego?
człowiek znaleźć mówi:
-L: Śledź linki symboliczne. Gdy find sprawdza lub drukuje informacje o plikach, wykorzystywane informacje należy pobrać z właściwości pliku, do którego prowadzi link, a nie z samego łącza (chyba że jest to zepsute łącze symboliczne lub find nie może zbadać pliku do którego prowadzi link).
Ogólna zasada jest taka, że jeśli polecenie działa na łączach (tj. Pozycjach katalogu, które są wskaźnikami do i-węzłów), wówczas traktuje dowiązania symboliczne jako siebie, a nie jako obiekt, na który wskazuje łącze. W przeciwnym razie polecenie działa na tym, na co wskazuje dowiązanie symboliczne. W ten
cp
sposób domyślnie podąża za dowiązaniami symbolicznymi i kopiuje zawartość pliku wskazywanego przez dowiązanie. Ale kiedy poprosiszcp
o zajęcie się pozycjami katalogu poprzez określenie-R
, przestaje on podążać za dowiązaniami symbolicznymi.mv
zawsze działa z pozycjami katalogu, więc nigdy nie podąża za dowiązaniami symbolicznymi.Na
find
normalne działanie polecenia jest do pracy w pozycji katalogu, więc dowiązania nie są przestrzegane domyślnie. Dodanie-L
powodujefind
podążanie za dowiązaniami symbolicznymi dla wszystkich właściwości oprócz tej, której nie można zignorować podczas przeszukiwania katalogu - nazwy. Jednym z celówfind -name
jest zapewnienie danych wejściowych dla poleceń takich jakmv
irm
, które działają na pozycjach katalogu. Byłoby nieprzyjemne i zaskakujące wyniki, gdybyfind -L dir -name
można było wytworzyć nazwy wskazujące poza zakorzenione drzewo katalogówdir
.źródło
There would be unpleasant and surprising results if
znajdź -L nazwa-katalogu` może wygenerować nazwy wskazujące poza drzewo katalogów zakorzenione w katalogu. => Nie powinno tak być: byłoby nieprzyjemne ... gdybyfind dir -name pattern
...? ponieważ dodanie -L pozwala wskazać na zewnątrz reżcp -R
skopiować rzeczy pod dowiązaniem symbolicznym?