접두사가 동일한 하위 디렉터리와 zip 파일을 반복하고 압축 후 원본 파일을 삭제합니다.

접두사가 동일한 하위 디렉터리와 zip 파일을 반복하고 압축 후 원본 파일을 삭제합니다.

현재 코드가 있습니다.

for fname in *.*; do
    prefix=${fname%.*}
    [ ! -f "$fname" ] || [ -f "$prefix.zip" ] && continue
    zip "$prefix" "$prefix".*
done

이게 대부분 제가 원하는 내용인데 원본 파일을 삭제해야겠네요. 압축 후 원본 파일을 삭제하도록 수정이 가능한가요? 가능하다면 디렉터리나 하위 디렉터리에서 이 작업을 어떻게 수행할 수 있습니까?

현재 파일 구조는 다음과 같습니다.

-rootDir
|- Dir1
 |- file1.jpg
 |- file1.png
 |- file1.mp3
|- Dir2
 |- file2.jpg
 |- file2.png
 |- file2.mp3

내 목표는 다음 구조입니다.

-rootDir
|- Dir1
 |- file1.zip
|- Dir2
 |- file2.zip

언급한 대로 위 코드는 단일 디렉터리에서 실행될 때 제대로 작동합니다.

현재 하위 디렉터리가 300개 있습니다. 위 코드의 수정된 버전을 가져와 루트 수준에서 실행하고 나머지 파일을 정리할 수 있다면 큰 도움이 될 것입니다.

답변1

zip파일을 아카이브로 이동해야 하는 --move( ) 옵션이 있습니다 .-m아카이브에 성공적으로 추가한 후 삭제하십시오. -T실제로 파일을 삭제하기 전에 아카이브를 테스트하는 옵션과 함께 사용하는 것이 좋습니다 .

zip -mT "$prefix" "$prefix".*

여러 디렉터리를 처리하려면 해당 디렉터리를 반복할 수 있습니다.

for dir in */; do
    (cd "$dir" && for fname in *.*; do
        prefix="${fname%.*}"
        [ ! -f "$fname" ] || [ -f "$prefix.zip" ] && continue
        zip -mT "$prefix" "$prefix".*
    done)
done

관련 정보