다음과 같은 파일 세트가 있습니다.
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"' _ {} \;