![디렉터리의 모든 파일을 재귀적으로 복사하고 압축된 파일의 압축을 동적으로 푸는 방법 [닫기]](https://linux55.com/image/124847/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9E%AC%EA%B7%80%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EB%B3%B5%EC%82%AC%ED%95%98%EA%B3%A0%20%EC%95%95%EC%B6%95%EB%90%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%95%95%EC%B6%95%EC%9D%84%20%EB%8F%99%EC%A0%81%EC%9C%BC%EB%A1%9C%20%ED%91%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
많은 하위 디렉터리가 있는 디렉터리에 대규모 표준/압축 파일 모음이 있습니다.
이제 이 구조화된 디렉터리와 모든 콘텐츠(파일 및 하위 디렉터리)를 다른 디스크에 복사하고 모든 압축 파일의 압축을 풀어야 합니다.
따라서 시간을 절약하기 위해 디렉터리의 모든 파일을 재귀적으로 복사하고 즉시 압축된 파일의 압축을 풀고 싶습니다.
어떻게 해야 하나요?
답변1
소스 및 대상 디렉토리로 $SOURCE
및 를 사용하여 이를 3개의 별도 단계로 나누겠습니다 .$DEST
대상 디렉터리에 소스 디렉터리 구조를 다시 만듭니다.
find $SOURCE -type d | sed -e "s~^$SOURCE~~" | xargs -r -I dir mkdir -p "$DEST"/"dir"
압축을 풀 필요가 없는 파일은 모두 이동하세요.
find $SOURCE -type f -not -name '*.gz' | sed -e "s~^$SOURCE/~~" | xargs -r -I file cp "$SOURCE"/"file" "$DEST"/"file"
모든 압축 파일을 대상 디렉터리에 추출합니다.
find $SOURCE -type f -name '*.gz' | sed -e "s~^$SOURCE~~" | sed -e "s~.gz$~~" | xargs -r -I file bash -c 'gzip -dc "'"$SOURCE"'"/"file".gz > "'"$DEST"'"/"file"'
즉, 제안에 따라 rsync -av
모든 파일 복사를 사용한 다음 find . -name '*.gz' -exec gunzip \{\} \;
대상 디렉터리에 파일의 압축을 푸는 것이 좋습니다. 이는 잠재적인 위험이 적은 보다 간단한 접근 방식입니다. (위의 세 단계는 제한된 수의 파일과 상대적으로 간단한 파일 이름을 가진 작은 테스트 디렉토리에서 저에게 효과적이었습니다. YMMV는 더 복잡한 사용 사례에 적합합니다.)
답변2
tar
원하는 명령인 것 같습니다.
tar cf - <dir> | (cd <path-to-other-dir>; tar xf -)
나는 보통 디렉토리의 내용을 다른 폴더에 복사하고 싶을 때 이것을 사용합니다.