원본 파일을 잃지 않고 BZIP2 여러 파일

원본 파일을 잃지 않고 BZIP2 여러 파일

약 1000개의 파일을 bzip2로 압축하고 싶습니다. 그러나 내 임무는 이전 파일을 삭제하고 원본 파일과 해당 bz2 파일을 동일한 폴더에 보관하는 것이 아닙니다. 가장 빠른 방법은 무엇입니까?

내 질문을 바꿔 말하면, file1.txt, file2.txt, file3.txt...file1000.txt가 있고 해당 bz2 버전을 삭제하지 않고 같은 폴더에 넣어야 한다고 가정해 보겠습니다.

이 목표를 달성하는 방법은 무엇입니까?

답변1

-k옵션은 매뉴얼에 다음 bzip2과 같이 설명되어 있습니다.

-k --keep

압축 또는 압축 해제 중에 입력 파일을 보존(삭제하지 않음)합니다.

따라서 평소와 같이 파일을 압축하고 bzip2추가 하면 -k원본 파일이 삭제되지 않습니다.

모든 .txt파일을 디렉토리로 압축하려면 다음을 수행하십시오.

bzip2 -k ./*.txt

이로 인해 "인수 목록이 너무 깁니다"(수만 개의 파일이 있는 경우 발생)가 생성되면 대신 간단한 쉘 루프를 사용하십시오.

for name in ./*.txt; do
    bzip2 -k "$name"
done

답변2

find /PATH/ -type f -execdir bzip2 -k '{}' \;

/PATH/, 모든 정규식을 재귀적 으로 검색합니다.에프에어즈, 그리고구현하다각자의 입장에서목차bzip2 -k /PATH/TO/FILE원본 파일과 압축 파일의 디렉터리는 보존됩니다 bzip2.

그럼 이런 폴더구조가 됩니다

/PATH/file1
/PATH/file2
/PATH/folder1/
/PATH/folder1/file1
/PATH/folder1/file2

이어질 것이다

/PATH/file1
/PATH/file1.bz2
/PATH/file2
/PATH/file2.bz2
/PATH/folder1/
/PATH/folder1/file1
/PATH/folder1/file1.bz2
/PATH/folder1/file2
/PATH/folder1/file2.bz2

위의 솔루션은 직렬로 실행됩니다. 작업 속도를 높이기 위해 병렬로 실행해 보겠습니다.

find /PATH/ -type f | xargs -L1 -P10 -I{} bzip2 -k '{}'

일반 규칙에 대한 재귀 검색에프파일을 저장 /PATH/하고 해당 파일에 대한 입력으로 전달한 xargs다음 입력을 구문 분석합니다.이네스(1한 번),공정(최대.10병렬로 실행), 사용입력 자리 표시자{}입력(예: 이 경우 라인)을 처리하는 데 사용됩니다. bzip2 -k해당 자리 표시자에 대해 실행합니다 .

파일 이름에 공백이 포함된 경우 자리 표시자를 인용하십시오.

관련 정보