아카이브를 찾아 해당 디렉토리에 압축을 풉니다.

아카이브를 찾아 해당 디렉토리에 압축을 풉니다.

모든 디렉토리에 있는 tar 파일을 찾아 한 줄의 명령으로 압축을 풀고 싶습니다. 홈 디렉토리와 별도로 찾을 수 있습니다. 하지만 해당 파일이 있는 디렉터리에서만 추출할 수 있습니다. 파이프를 사용하여 이 두 작업을 한 줄로 어떻게 수행할 수 있습니까?

find -name any.tar ; tar xf any.tar이것을 시도해 보았습니다. any.tar모든 디렉토리에서 개별적으로 파일을 찾을 수 있습니다. 또한 파일을 개별적으로 추출하지만 해당 파일이 있는 디렉터리 tar xf에만 추출합니다 . any.tar이 두 명령을 한 줄로 실행하여 any.tar명령이 홈 디렉터리에서 컴파일될 때 찾아서 추출할 수 있도록 하고 싶습니다.

저는 유닉스를 처음 접했습니다. 도와주세요. 감사해요.

답변1

이것이 도움이 될 수 있습니다

find ./ -name '*.tar' -exec sh -c 'dir=$(dirname "$0"); tar -xvf "${0}" -C "${dir}"; done' {} \;

man페이지 에서tar

-C, --directory DIR
       change to directory DIR

답변2

동일한 문제를 검색하는 이 페이지를 찾았는데 제안이 직접적으로 작동하지 않았지만 약간만 조정하면 내 사용 사례에 적합했습니다.

find . -name "*.tar" -exec sh -c 'tar xvf {} -C $(dirname {})' \;

답변3

가장 먼저 찾아야 할 것은 다음과 같습니다.

디렉토리에서 모든 tar 파일을 찾으려면 find $directory -iname "*.tar"다음을 주의해야 합니다. -iname는 gnu 확장자이므로 gnu를 사용하지 않는 경우에는 -name *.tar -o -name *.TAR거의 동일하게 수행해야 합니다.

이제 작업 중인 tar 명령을 추가하세요.

find $directory -iname "*.tar" -print0 | xargs -0 --max-args=1 tar xf

그러면 모든 tar 파일이 현재 작업 디렉터리로 추출됩니다.

관련 정보