원문 보기: https://dawoum.duckdns.org/wiki/Czkawka_(software)
Czkawka는 중복 파일, 빈 디렉토리를 검색하고 제거하기 위해 만들어진 프로그램입니다. 그것은 Rust (programming language)로 작성되었고, GUI와 CLI 인터페이스를 모두 갖추고 있습니다.
Czkawka CLI는 터미널에서 실행됩니다.
Czkawka GUI는 GTK 4로 작성된 Czkawka Core에 대한 그래픽 사용자 인터페이스입니다.
Krokiet GUI는 주로 C 코드를 사용하는 Gtk 4 프런트엔드와 반대로 Rust를 사용하는 Slint로 작성된 새로운 Czkawka 프런트엔드입니다.
Introduction
리눅스의 시스템 디렉토리에는 가능한 개인 사용자의 데이터를 남기지 않는 것이 좋은데, 왜냐하면 돌발적인 상황, 예를 들어, 시스템을 다시 설치해야 할 경우에 해당 디렉토리는 거의 백업될 가능성이 없기 때문입니다. 방법이 없는 것은 아니지만, 대체로 난이도가 높거나 귀찮습니다!!
그래서 시스템 영역에 기록되는 데이터 중에 중요한 것은 주기적으로 백업을 하는 방안을 구축할 필요가 있고, 가능한 둘 이상의 여분의 디스크를 마운트해서 두 번이상 백업해 두는 것이 필요합니다.
이러다 보니, 개인 사용자는 사용자 홈디렉토리 아래에 어마어마한 양의 파일, 예를 들어 수 십만 개, 수 백만 개, 수 천만 개, 등을 보관하게 됩니다.
이런 파일들은 사용하는 시간이 증가함에 따라 지속적으로 증가하는 것이 일반적입니다.
이런 상황 아래에서 특히, 같은 파일을 여러 번 보관할 수도 있으며, 이를 정리할 필요가 있습니다. 물론 이를 도와주는 자동화 프로그램이 있지만, 대체로 원하는 동작을 시키기에 별도의 지식이 필요할 수 있습니다. 반면에 잘못 조작할 경우에 예상치 못한 중요한 데이터의 손실을 발생시키기도 합니다!!
그래서, 자동화 도구 대신에 중복 파일을 찾고 사용자가 수동으로 제거하는 프로그램을 선호활 수도 있으며, 그 중 하나가 Czkawka입니다.
모순되게도, 디스크의 여유가 충분히 있을 때에는 임시 데이터를 제외하고 정리를 안하는 것이 최선일 수도 있습니다. 대체로 정리를 하다보면, 사고가 생기기 마련입니다!!
Installation
데비안 저장소에서 패키지를 제공하지 않습니다. 개발자가 제공하는 바이너리를 설치할 수 있습니다:
최신 버전은 아니지만, Flatpak으로 제공하는 것을 설치할 수 있습니다:
Debian packaging
의존성 패키지는 아래와 같습니다:
- Czkawka CLI: ffmpeg libraw-dev libheif-dev
- Czkawka GUI: libgtk-4 libheif libraw ffmpeg
- Krokiet GUI: libfontconfig-dev libfreetype-dev
개발자 소스로부터 패키지를 만들 수 있습니다.
- git clone --recurse-submodules --depth 1 https://github.com/qarmin/czkawka
- cd czkawka
- cargo build --bin czkawka_cli --bin czkawka_gui --bin krokiet --features "heif,libraw" --release --verbose
이때 time 형식 관련 오류가 발생할 수 있습니다:
- cargo update
- cargo build --bin czkawka_cli --bin czkawka_gui --bin krokiet --features "heif,libraw" --release --verbose
이 상황에서도 의존성 패키지 부제로 오류가 발생할 수 있습니다.
이제 바이너리는 만들어졌으니, Building binary deb packages의 절차대로 패키지를 만들 수 있습니다. 이때, 아치 패키지 파일을 참조해서 설치 스크립트를 만들 수 있습니다:
먼저, czkawka-cli의 설치 스크립트를 만듭니다:
- gedit czkawka-cli.install
#!/bin/bash
pkgdir=czkawka-cli_7.0.0-1_amd64
install -Dm644 "czkawka_cli/LICENSE" \
"${pkgdir}/usr/share/licenses/czkawka-cli/LICENSE"
install -Dm755 "target/release/czkawka_cli" \
"${pkgdir}/usr/bin/czkawka_cli"
다음으로, czkawka-gui
- gedit czkawka-cli.install
#!/bin/bash
pkgdir=czkawka-gui_7.0.0-1_amd64
install -Dm644 "czkawka_gui/LICENSE" \
"${pkgdir}/usr/share/licenses/czkawka-gui/LICENSE"
install -Dm755 "target/release/czkawka_gui" \
"${pkgdir}/usr/bin/czkawka_gui"
install -Dm644 "data/com.github.qarmin.czkawka.desktop" \
"${pkgdir}/usr/share/applications/com.github.qarmin.czkawka.desktop"
install -Dm644 "data/icons/com.github.qarmin.czkawka.svg" \
"${pkgdir}/usr/share/icons/hicolor/scalable/apps/com.github.qarmin.czkawka.svg"
install -Dm644 "data/icons/com.github.qarmin.czkawka.Devel.svg" \
"${pkgdir}/usr/share/icons/hicolor/scalable/apps/com.github.qarmin.czkawka.Devel.svg"
install -Dm644 "data/icons/com.github.qarmin.czkawka-symbolic.svg" \
"${pkgdir}/usr/share/icons/hicolor/symbolic/apps/com.github.qarmin.czkawka-symbolic.svg"
install -Dm644 "data/com.github.qarmin.czkawka.metainfo.xml" \
"${pkgdir}/usr/share/metainfo/com.github.qarmin.czkawka.metainfo.xml"
마지막으로 krokiet
- gedit krokiet.install
#!/bin/bash
pkgdir=krokiet_7.0.0-1_amd64
install -Dm644 "krokiet/LICENSE" \
"${pkgdir}/usr/share/licenses/krokiet/LICENSE"
install -Dm644 "krokiet/LICENSE_MIT_CODE" \
"${pkgdir}/usr/share/licenses/krokiet/LICENSE.MIT"
install -Dm755 "target/release/krokiet" \
"${pkgdir}/usr/bin/krokiet"
실행하고 이제 데비안 control을 만듭니다:
- bash czkawka-cli.install
- bash czkawka-gui.install
- bash krokiet.install
- mkdir -p czkawka-cli_7.0.0-1_amd64/DEBIAN
- mkdir -p czkawka-gui_7.0.0-1_amd64/DEBIAN
- mkdir -p krokiet_7.0.0-1_amd64/DEBIAN
- touch czkawka-cli_7.0.0-1_amd64/DEBIAN/control
- touch czkawka-gui_7.0.0-1_amd64/DEBIAN/control
- touch krokiet_7.0.0-1_amd64/DEBIAN/control
마지막 세 개의 파일에 내용을 채워 넣고, 패키지를 만들고 설치합니다:
- dpkg-deb --build --root-owner-group czkawka-cli_7.0.0-1_amd64
- dpkg-deb --build --root-owner-group czkawka-gui_7.0.0-1_amd64
- dpkg-deb --build --root-owner-group krokiet_7.0.0-1_amd64
- sudo dpkg -i czkawka-cli_7.0.0-1_amd64.deb
- sudo dpkg -i czkawka-gui_7.0.0-1_amd64.deb
- sudo dpkg -i krokiet_7.0.0-1_amd64.deb
문제는 krokiet를 실행하면, 높은 해상도에서 화면 글꼴이 너무 작은데, 이를 바꿀 방법으로 알려진 것이 없는 것으로 보입니다. 최근에 개발 중이라서 이 부분이 설정 가능하도록 변경되기를 희망해 봅니다.
Usage
처음에는 내용을 확인하기 쉬운 gui 버전을 실행할 수 있습니다.
화면이 올라오면, 왼쪽 위쪽 부분에 Remove 옆에 검색할 디렉토리가 보입니다. 주로 사용자 홈디렉토리가 보일텐데, 내용물이 많을 때에는 지우고 Add를 눌러서 원하는 디렉토리를 추가하십시오.
그런-다음 Manual Add 아래에 원하는 기능을 선택합니다. 기본값은 Duplicate Files입니다.
그런-다음 그 아래에 Search를 누릅니다.
내용물을 확인해서 불필요한 파일을 선택하고 오른쪽 아래에 있는 명령 중에 하나, 예를 들어, Delete를 선택할 수 있습니다.
초기 검색에서 디렉토리 내의 파일의 개수에 따라 시간 소모적인데, 생각처럼 많이 걸리지는 않고, 이 후에는 캐시로 저장되기 때문에 빠르게 결과를 보여줍니다.
Features
Below some characteristics of Czkawka:
- Written in memory-safe Rust
- Amazingly fast - due to using more or less advanced algorithms and multithreading
- Free, Open Source without ads
- Multiplatform - works on Linux, Windows, macOS, FreeBSD and many more
- Cache support - second and further scans should be much faster than the first one
- CLI frontend - for easy automation
- GUI frontend - uses GTK 4 or Slint frameworks
- No spying - Czkawka does not have access to the Internet, nor does it collect any user information or statistics
- Multilingual - support multiple languages like Polish, English or Italian
- Multiple tools to use:
- Duplicates - Finds duplicates based on file name, size or hash
- Empty Folders - Finds empty folders with the help of an advanced algorithm
- Big Files - Finds the provided number of the biggest files in given location
- Empty Files - Looks for empty files across the drive
- Temporary Files - Finds temporary files
- Similar Images - Finds images which are not exactly the same (different resolution, watermarks)
- Similar Videos - Looks for visually similar videos
- Same Music - Searches for similar music by tags or by reading content and comparing it
- Invalid Symbolic Links - Shows symbolic links which point to non-existent files/directories
- Broken Files - Finds files that are invalid or corrupted
- Bad Extensions - Lists files whose content not match with their extension
External Resources
Screenshots
