여러 tgz 파일을 부분 파일 이름이 포함된 별도의 폴더로 추출하는 방법은 무엇입니까?

여러 tgz 파일을 부분 파일 이름이 포함된 별도의 폴더로 추출하는 방법은 무엇입니까?

Linux bash 셸에서 내 파일은 다음과 같습니다.

xyz_a.tgz      xyz_b.tgz      xyz_c.tgz

각 파일을 별도의 폴더에 추출하고 싶습니다.

a b c

나는 이것을 시도한다:

$ for file in xyz_*.tgz ;do tar -xzf $file -C $file --strip -component=1;done

그러나 그것은 막혔습니다. 도와주세요?

답변1

$ for file in xyz_*.tgz; do
  dir="${file/.tgz}";
  dir="${dir/xyz_}";
  echo mkdir -p "$dir";
  echo tar -C "$dir" xfz "$file";
done
mkdir -p a
tar -C a xfz xyz_a.tgz
mkdir -p b
tar -C b xfz xyz_b.tgz
mkdir -p c
tar -C c xfz xyz_c.tgz

(가독성을 위해 줄 바꿈을 추가했습니다. 그대로 실행하거나 한 줄로 병합할 수 있도록 세미콜론을 그대로 두었습니다.)

이를 수행하는 한 가지 방법의 파일럿 예제는 다음과 같습니다. 두 개의 bash 패턴 교체 명령을 사용하여 접미사 .tgz와 접두사를 제거하여 xyz_각 파일 이름에 대해 일치하는 Fireory 이름을 추출합니다. 그런 다음 각 디렉터리가 .tgz로 끝나는지 확인하는 명령을 인쇄합니다 mkdir p. 마지막으로 tar각 .tgz 파일을 자체 디렉터리로 추출하는 명령을 인쇄합니다.

echo실제로 이러한 명령을 실행하려면 및 줄을 제거하세요.mkdirtar

관련 정보