Chcę znaleźć plik, a następnie wejść do katalogu zawierającego go. Próbowałem, find /media/storage -name "Fedora" | xargs cd
ale oczywiście is not a directory
popełniłem błąd.
Jak wprowadzić katalog nadrzędny za pomocą polecenia w jednym wierszu?
shopt -s globstar
, możesz cd /media/storage/**/Fedora
, ale to nie przestaje oceniać globu przy pierwszym dopasowaniu (więc jest wolniejsze niż rozwiązanie steeldriver. W przypadku użycia interaktywnego zwykle sięgam po mysz i kopiuję / wklejam nazwę katalogu, (i alt + backspace w razie potrzeby, aby usunąć komponenty ścieżki końcowej, których nie chciałem), ale jeśli robisz to dużo, wydaje mi się, że warto zastosować funkcję powłoki.
xargs cd
prawdopodobnie nie może działać. cd
może działać tylko jako wbudowana powłoka, ponieważ musi modyfikować kontekst samej powłoki. Nie ma możliwości, aby xargs
proces potomny mógł to zrobić. IDK, jeśli to właśnie rozumiesz przez „oczywiście”, lub jeśli find
drukowana ścieżka zawiera spacje, które są podzielone przez xargs, ponieważ nie używałeś -d \n
lub nic. Lub find -exec {} \;
.
cd
. cd
to wbudowane bash, gdyby cd
były osobnym poleceniem, to zmieniłoby (własny) katalog, a następnie zakończyłoby (powrót do powłoki, czyli w takim samym stanie jak poprzednio, bez zmiany katalogu).