여러 파일을 한 번에 압축 해제하는 Bash 스크립트

여러 파일을 한 번에 압축 해제하는 Bash 스크립트

다음과 같은 파일 세트가 있습니다.

lium3@l128-37:/DATA/fr94/01 $ ls -l
total 7784
-rw-r--r-- 1 lium3 mcm1 395575 May  2  1996 fr940104.0z
-rw-r--r-- 1 lium3 mcm1 113815 May  2  1996 fr940104.1z
-rw-r--r-- 1 lium3 mcm1 186333 May  2  1996 fr940104.2z
-rw-r--r-- 1 lium3 mcm1 164854 May  2  1996 fr940105.0z
-rw-r--r-- 1 lium3 mcm1  39677 May  2  1996 fr940105.1z
-rw-r--r-- 1 lium3 mcm1 284948 May  2  1996 fr940105.2z

한꺼번에 압축을 풀고 싶습니다(이것은 단지 예일 뿐입니다!).

나는 이것을 시도했다

find -name '*.0z' -exec sh -c 'uncompress  "${1%.*}" "$1"' _ {} \;

방금 받은 것:

gzip: ./fr940125.gz: No such file or directory
gzip: ./fr940125.0z: unknown suffix -- ignored
gzip: ./fr940106.gz: No such file or directory
gzip: ./fr940106.0z: unknown suffix -- ignored

나는 그러한 파일을 포함하는 많은 디렉토리를 가지고 있습니다.

디렉토리를 실행하는 스크립트를 얻을 수 있다면 디렉토리를 통해 재귀적으로 수행할 수 있습니까?

답변1

두 가지 문제가 있는 것 같습니다.

1: ${1%.*}결과는 파일의 기본 이름(예: fr940125)이므로 압축 해제 시 기본 접미사 .gz를 추가하려고 시도하지만 시도하는 결합된 새 파일 이름에 대한 파일이 존재하지 않습니다.

2: uncompress에 아카이브의 올바른 파일 이름인 두 번째 매개변수를 제공했지만 uncompress는 파일 끝을 처리하는 방법을 모릅니다. 매개변수 " "를 매개변수로 전달해 보세요 -S .0z.

다음 명령은 현재 디렉터리와 모든 하위 디렉터리의 모든 .0z 파일을 반복적으로 추출하는 올바른 명령일 수 있습니다.

find -name '*.0z' -exec sh -c 'uncompress  -S .0z "$1"' _ {} \;

관련 정보