그렇기 때문에 달리기가 xargs cd작동하지 않습니다.

그렇기 때문에 달리기가 xargs cd작동하지 않습니다.

파일을 찾은 다음 해당 파일이 포함된 디렉터리로 이동하고 싶습니다. 노력했지만 find /media/storage -name "Fedora" | xargs cd물론 is not a directory실수도 했습니다.

한 줄의 명령으로 상위 디렉터리에 어떻게 들어갈 수 있나요?

답변1

적어도 GNU가 있다면 다음을 사용하여 디렉토리를 얻을 find수 있습니다 .-printf '%h'

       %h     Leading directories of file's name (all but the last ele‐
              ment).  If the file name contains no slashes (since it is
              in  the  current  directory)  the %h specifier expands to
              ".".

그래서 당신은 아마 할 수 있습니다

cd "$(find /media/storage -name "Fedora" -printf '%h' -quit)"

여러 파일이 일치하는 경우 -quit여러 인수를 사용하지 않아야 합니다 .cd

답변2

~처럼스틸 드라이버솔루션이지만 결합되어 있습니다 -execdir( find지원하는 경우(예: GNU 또는 FreeBSD)):findpwd

cd "$(find /media/storage -name "Fedora" -execdir pwd \; -quit)"

-quit결과가 하나뿐이고 전체 디렉터리를 크롤링하는 데 문제가 없는 경우 선택 사항입니다. NetBSD에는 존재 -exit하지만 OpenBSD에는 존재하지 않습니다.

답변3

find가 찾은 디렉토리에서 새 쉘을 실행하도록 지시할 수 있습니다.

exec find /media/storage -name "Fedora" -execdir "$SHELL" \;

, 현재 디렉터리는 Fedora라는 파일이 포함된 디렉터리가 됩니다. ;)

분명히 이는 대화형으로 명령을 입력하는 경우에만 원하는 것과 비슷한 작업을 수행할 것입니다.

답변4

이 문제를 해결하는 방법과 작동하는 것을 얻는 방법을 보여주는 많은 답변이 이미 있습니다. 그러나 처음부터 왜 그것이 작동하지 않는지 아무도 말하지 않았습니다.

그렇기 때문에 달리기가 xargs cd작동하지 않습니다.

이는 디렉터리를 변경하는 스크립트를 작성하는 것과 동일한 문제입니다.

  • xargs새 프로세스에서 실행할 새 프로세스/스크립트를 시작합니다.
  • cd이 새 프로세스의 현재 작업 디렉터리를 변경합니다.
  • 새 프로세스가 종료됩니다.

따라서 더 이상 존재하지 않는 프로세스의 현재 작업 디렉터리가 변경되었습니다.

그런 다음 cd내장 명령을 사용하는 셸에서 이를 호출합니다. 새로운 프로세스를 생성하지 않습니다. 이러한 방식으로 쉘 프로세스의 현재 작업 디렉토리가 변경됩니다.


무엇을 해야할지 알아 보려면 다른 답변을 참조하십시오.

관련 정보