현재 코드가 있습니다.
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