많은 하위 디렉터리가 있는 디렉터리에 대규모 표준/압축 파일 모음이 있습니다.
이제 이 구조화된 디렉터리와 모든 콘텐츠(파일 및 하위 디렉터리)를 다른 디스크에 복사하고 모든 압축 파일의 압축을 풀어야 합니다.
따라서 시간을 절약하기 위해 디렉터리의 모든 파일을 재귀적으로 복사하고 즉시 압축된 파일의 압축을 풀고 싶습니다.
어떻게 해야 하나요?
답변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 -)
나는 보통 디렉토리의 내용을 다른 폴더에 복사하고 싶을 때 이것을 사용합니다.