모든 디렉토리에 있는 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 파일이 현재 작업 디렉터리로 추출됩니다.