DriveTool.sh: um script para cópia rápida e segura de arquivos para unidades flash USB
Publicado por Raphael Ciribelly (última atualização em 14/05/2024)
[ Hits: 1.318 ]
No Linux, os arquivos são gravados permanentemente somente após a desmontagem da partição. Isso pode explicar por que muitas ferramentas gráficas oferecem desempenho insatisfatório ao gravar arquivos em unidades flash USB. Para resolver esse problema, desenvolvi um script compacto que, até agora, tem funcionado de maneira eficaz.
Observação: não consegui fazer com que o recurso status=progress funcionasse corretamente. No entanto, o script copia com êxito os arquivos transferidos para a unidade flash USB. Depois de realizar vários testes, nenhum erro foi encontrado.
#!/bin/bash declare -r MOUNT_POINT="/media/flashdrive" # Function to check for required commands check_dependencies() { local dependencies=(lsblk mkdir mount umount dd cp du grep diff) for cmd in "${dependencies[@]}"; do if ! command -v "$cmd" &> /dev/null; then echo "Error: Required command '$cmd' is not installed." >&2 exit 1 fi done } # Function to check if device is mounted and unmount it safe_unmount() { local device="$1" if mount | grep -qw "$device"; then echo "$device is currently mounted, attempting to unmount..." sudo umount "$device" && echo "$device unmounted successfully." || { echo "Failed to unmount $device."; return 1; } fi } # Function to mount drive ensure_mounted() { local device="$1" if ! mount | grep -q "$MOUNT_POINT"; then echo "Mounting $device..." sudo mkdir -p "$MOUNT_POINT" sudo mount "$device" "$MOUNT_POINT" || { echo "Failed to mount $device."; exit 1; } else echo "Device is already mounted on $MOUNT_POINT." fi } # Function to copy files or directories safely copy_files() { local source="$1" local destination="$2" local dest_path="$destination/$(basename "$source")" if [[ -d "$source" ]]; then echo "Copying directory $source to $destination using 'cp -r'..." sudo cp -r "$source" "$dest_path" && echo "$source has been copied." else echo "Copying file $source to $destination using 'dd'..." sudo dd if="$source" of="$dest_path" bs=4M status=progress && echo "$source has been copied." fi echo "Wait finishing changes..." sudo mount -o remount,sync "$MOUNT_POINT" # Verify copy integrity du -b "$source" "$dest_path" if sudo diff -qr "$source" "$dest_path"; then echo "Verification successful: No differences found." else echo "Verification failed: Differences found!" return 1 fi } # Function to format the drive format_drive() { local device="$1" echo "Checking if device $device is mounted..." safe_unmount "$device" || return 1 echo "Formatting $device..." sudo mkfs.exfat "$device" && echo "Drive formatted successfully." || echo "Formatting failed." } # Function to display usage information help() { echo "Usage: $0 OPTION [ARGUMENTS]" echo echo "Options:" echo " -c, -C DEVICE SOURCE_PATH Mount DEVICE and copy SOURCE_PATH to it." echo " -l, -L List information about block devices." echo " -f, -F DEVICE Format DEVICE." echo echo "Examples:" echo " $0 -C /dev/sdx /path/to/data # Copy /path/to/data to /dev/sdx after mounting it." echo " $0 -L # List all block devices." echo " $0 -F /dev/sdx # Format /dev/sdx." } # Process command-line arguments case "$1" in -C | -c) check_dependencies ensure_mounted "$3" copy_files "$2" "$MOUNT_POINT" echo "Unmounting $MOUNT_POINT" sudo umount "$MOUNT_POINT" ;; -L | -l) lsblk -o NAME,MODEL,SERIAL,VENDOR,TRAN ;; -F | -f) check_dependencies format_drive "$2" ;; *) help ;; esac
Backup de diretórios do sistema Linux
BTRFS - Gerenciamento de snapshot por quantidade
PKG Sync v4.0 - utilitário para backup de pacotes DEB baixados
Lisa - sistema de backup com rsync
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Estou com sede em aprender sobre o nosso querido Linux. (1)
big linux sem audio como resolver (2)
Como faz para dar um update-grub por shell script [RESOLVIDO] (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta