약 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
해당 자리 표시자에 대해 실행합니다 .
파일 이름에 공백이 포함된 경우 자리 표시자를 인용하십시오.