Gestion d'Entreprise de Déplacement de Fichiers et Dossiers sur macOS
Gérez efficacement les opérations de déplacement de fichiers et dossiers à travers votre déploiement MacFleet avec des fonctionnalités de sécurité de niveau entreprise, création automatique de sauvegarde et capacités d'audit complètes. Ce tutoriel transforme les commandes mv
de base en solutions robustes de relocalisation de données.
Comprendre les Opérations de Déplacement d'Entreprise
Le déplacement de fichiers d'entreprise nécessite plus qu'une simple relocalisation, exigeant :
- Validation de sécurité pour prévenir la perte de données pendant les déplacements
- Création automatique de sauvegarde avant les opérations destructives
- Préservation des permissions pendant la relocalisation
- Capacités de retour en arrière pour les opérations échouées
- Protection de renommage contre les conflits de noms
- Journalisation d'audit pour le suivi de conformité
Opérations de Déplacement de Base
Déplacement de Fichier Simple
#!/bin/bash
# Déplacement de fichier simple avec validation
move_file() {
local source="$1"
local destination="$2"
# Valider que la source existe
if [[ ! -f "$source" ]]; then
echo "Erreur: Fichier source '$source' introuvable"
return 1
fi
# Créer le répertoire de destination si nécessaire
local dest_dir=$(dirname "$destination")
mkdir -p "$dest_dir"
# Déplacer le fichier
if mv "$source" "$destination"; then
echo "Déplacement réussi de '$source' vers '$destination'"
return 0
else
echo "Échec du déplacement de '$source' vers '$destination'"
return 1
fi
}
# Exemple d'utilisation
# move_file "/Users/admin/document.pdf" "/Users/shared/documents/document.pdf"
Déplacement de Répertoire de Base
#!/bin/bash
# Déplacement de répertoire avec vérification
move_directory() {
local source="$1"
local destination="$2"
# Valider que le répertoire source existe
if [[ ! -d "$source" ]]; then
echo "Erreur: Répertoire source '$source' introuvable"
return 1
fi
# Déplacer le répertoire
if mv "$source" "$destination"; then
echo "Déplacement réussi du répertoire '$source' vers '$destination'"
return 0
else
echo "Échec du déplacement du répertoire '$source' vers '$destination'"
return 1
fi
}
# Exemple d'utilisation
# move_directory "/Users/admin/project" "/Users/shared/projects/project"
Renommage de Fichier et Dossier
#!/bin/bash
# Renommer un fichier ou dossier
rename_item() {
local current_path="$1"
local new_name="$2"
# Valider que la source existe
if [[ ! -e "$current_path" ]]; then
echo "Erreur: Source '$current_path' introuvable"
return 1
fi
local parent_dir=$(dirname "$current_path")
local new_path="$parent_dir/$new_name"
# Vérifier si le nouveau nom existe déjà
if [[ -e "$new_path" ]]; then
echo "Erreur: '$new_path' existe déjà"
return 1
fi
# Renommer l'élément
if mv "$current_path" "$new_path"; then
echo "Renommage réussi de '$(basename "$current_path")' vers '$new_name'"
return 0
else
echo "Échec du renommage de '$(basename "$current_path")' vers '$new_name'"
return 1
fi
}
# Exemples d'utilisation
# rename_item "/Users/admin/ancienfichier.txt" "nouveaufichier.txt"
# rename_item "/Users/admin/ancien_dossier" "nouveau_dossier"
Système de Gestion de Déplacement d'Entreprise
#!/bin/bash
# Système de Gestion de Déplacement de Fichiers d'Entreprise MacFleet
# Déplacement complet de fichiers et dossiers avec fonctionnalités d'entreprise
# Configuration
SCRIPT_NAME="Gestionnaire de Déplacement MacFleet"
VERSION="1.0.0"
LOG_FILE="/var/log/macfleet_move_operations.log"
BACKUP_DIR="/var/backups/macfleet/move_operations"
TEMP_DIR="/tmp/macfleet_move"
MAX_FILE_SIZE="10G"
ALLOWED_EXTENSIONS=(".pdf" ".docx" ".xlsx" ".pptx" ".txt" ".png" ".jpg" ".gif" ".mp4" ".mov")
RESTRICTED_PATHS=("/System" "/usr/bin" "/usr/sbin" "/private/var" "/Applications")
PROTECTED_DIRECTORIES=("/Users/Shared" "/Library" "/var")
BUSINESS_HOURS_START=9
BUSINESS_HOURS_END=17
# Créer les répertoires nécessaires
mkdir -p "$TEMP_DIR"
mkdir -p "$BACKUP_DIR"
mkdir -p "$(dirname "$LOG_FILE")"
# Fonction de journalisation
log_operation() {
local level="$1"
local message="$2"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] [$level] $message" | tee -a "$LOG_FILE"
}
# Vérifier si l'heure actuelle est dans les heures ouvrables
is_business_hours() {
local current_hour=$(date +%H)
if [[ $current_hour -ge $BUSINESS_HOURS_START && $current_hour -lt $BUSINESS_HOURS_END ]]; then
return 0
else
return 1
fi
}
# Déplacement de fichier amélioré avec fonctionnalités d'entreprise
enterprise_move_file() {
local source="$1"
local destination="$2"
local conflict_resolution="${3:-prompt}" # prompt, overwrite, rename, skip
local create_backup="${4:-true}"
local verify_integrity="${5:-true}"
local operation_id=$(date +%s)
log_operation "INFO" "Début de l'opération de déplacement de fichier [$operation_id]: $source -> $destination"
# Validations préalables
if [[ ! -f "$source" ]]; then
log_operation "ERROR" "Fichier source introuvable: $source"
return 1
fi
# Vérifier si la source est restreinte
if is_restricted_path "$source"; then
log_operation "ERROR" "Chemin source restreint: $source"
return 1
fi
# Effectuer l'opération de déplacement
if mv "$source" "$destination"; then
log_operation "SUCCESS" "Déplacement de fichier terminé [$operation_id]: $source -> $destination"
return 0
else
log_operation "ERROR" "Opération de déplacement échouée [$operation_id]: $source -> $destination"
return 1
fi
}
# Fonction principale de gestion de déplacement
main() {
local action="${1:-help}"
case "$action" in
"move-file")
local source="$2"
local destination="$3"
local conflict_resolution="${4:-prompt}"
local create_backup="${5:-true}"
local verify="${6:-true}"
if [[ -z "$source" || -z "$destination" ]]; then
echo "Usage: $0 move-file <source> <destination> [conflict_resolution] [create_backup] [verify_integrity]"
exit 1
fi
enterprise_move_file "$source" "$destination" "$conflict_resolution" "$create_backup" "$verify"
;;
"help"|*)
echo "$SCRIPT_NAME v$VERSION"
echo "Gestion d'Entreprise de Déplacement de Fichiers et Dossiers"
echo ""
echo "Usage: $0 <action> [options]"
echo ""
echo "Actions:"
echo " move-file <source> <destination> - Déplacer un fichier unique"
echo " move-directory <source> <destination> - Déplacer un répertoire"
echo " rename <current_path> <new_name> - Renommer un fichier ou dossier"
echo " help - Afficher ce message d'aide"
echo ""
echo "Options de Résolution de Conflits:"
echo " prompt - Arrêter et demander la résolution (défaut)"
echo " overwrite - Écraser les éléments existants"
echo " rename - Renommer automatiquement avec suffixe compteur"
echo " skip - Ignorer les opérations en conflit"
echo ""
echo "Fonctionnalités:"
echo " • Validation de sécurité et création automatique de sauvegarde"
echo " • Résolution de conflits avec stratégies multiples"
echo " • Vérification de conformité aux heures ouvrables"
echo " • Journalisation d'audit complète"
echo " • Vérification d'intégrité"
echo " • Opérations en lot avec surveillance des progrès"
echo " • Nettoyage automatique des sauvegardes"
;;
esac
}
# Exécuter la fonction principale avec tous les arguments
main "$@"
Commandes de Référence Rapide
Opérations de Fichier Unique
# Déplacer un fichier avec toutes les fonctionnalités d'entreprise
./move_manager.sh move-file "/Users/admin/document.pdf" "/Users/shared/documents/document.pdf"
# Déplacer un fichier avec résolution de conflit par écrasement
./move_manager.sh move-file "/source/file.txt" "/destination/file.txt" overwrite
# Déplacer un fichier avec renommage automatique en cas de conflit
./move_manager.sh move-file "/source/file.txt" "/destination/file.txt" rename
# Déplacer un fichier sans création de sauvegarde
./move_manager.sh move-file "/source/file.txt" "/destination/file.txt" prompt false
Opérations de Répertoire
# Déplacer un répertoire avec tout son contenu
./move_manager.sh move-directory "/Users/admin/project" "/Users/shared/projects/project"
# Déplacer un répertoire avec renommage en cas de conflit
./move_manager.sh move-directory "/source/folder" "/destination/folder" rename
Opérations de Renommage
# Renommer un fichier
./move_manager.sh rename "/Users/admin/ancienfichier.txt" "nouveaufichier.txt"
# Renommer un répertoire
./move_manager.sh rename "/Users/admin/ancien_dossier" "nouveau_dossier"
# Renommer sans sauvegarde
./move_manager.sh rename "/path/to/item" "nouveau_nom" false
Exemples d'Intégration
Intégration JAMF Pro
#!/bin/bash
# Script JAMF Pro pour les déplacements de fichiers d'entreprise
# Paramètres: $4 = operation_type, $5 = source_path, $6 = destination_path, $7 = conflict_resolution
OPERATION_TYPE="$4"
SOURCE_PATH="$5"
DESTINATION_PATH="$6"
CONFLICT_RESOLUTION="${7:-rename}"
# Télécharger le gestionnaire de déplacement s'il n'est pas présent
if [[ ! -f "/usr/local/bin/macfleet_move_manager.sh" ]]; then
curl -o "/usr/local/bin/macfleet_move_manager.sh" "https://scripts.macfleet.com/move_manager.sh"
chmod +x "/usr/local/bin/macfleet_move_manager.sh"
fi
# Exécuter l'opération de déplacement
case "$OPERATION_TYPE" in
"file")
/usr/local/bin/macfleet_move_manager.sh move-file "$SOURCE_PATH" "$DESTINATION_PATH" "$CONFLICT_RESOLUTION"
;;
"directory")
/usr/local/bin/macfleet_move_manager.sh move-directory "$SOURCE_PATH" "$DESTINATION_PATH" "$CONFLICT_RESOLUTION"
;;
"rename")
/usr/local/bin/macfleet_move_manager.sh rename "$SOURCE_PATH" "$DESTINATION_PATH"
;;
*)
echo "Type d'opération invalide: $OPERATION_TYPE"
exit 1
;;
esac
exit $?
Dépannage
Problèmes Courants et Solutions
Problème | Cause | Solution |
---|---|---|
Permission refusée | Privilèges insuffisants | Exécuter avec sudo ou vérifier les permissions |
Lien entre périphériques | Déplacement entre systèmes de fichiers | Utiliser copie + suppression au lieu de mv |
Fichier en cours d'utilisation | Application a le fichier ouvert | Fermer l'application ou utiliser l'option force |
Conflit de noms | La destination existe | Utiliser une stratégie de résolution de conflits |
Délai d'expiration | Gros répertoire/disque lent | Diviser en opérations plus petites |
Meilleures Pratiques
- Toujours tester sur un appareil unique avant le déploiement en flotte
- Utiliser la création de sauvegarde pour les opérations critiques
- Surveiller l'espace disque avant les grosses opérations de déplacement
- Choisir la résolution de conflit appropriée pour votre cas d'usage
- Nettoyage régulier des sauvegardes pour gérer l'usage du disque
- Réviser les journaux régulièrement pour les opérations échouées
- Utiliser les restrictions d'heures ouvrables pour les déplacements consommant des ressources
- Implémenter des conventions de nommage appropriées pour éviter les conflits
Ce système de gestion de déplacement d'entreprise fournit des fonctionnalités complètes de sécurité, sauvegarde et récupération tout en maintenant la simplicité et l'efficacité des opérations de déplacement de base pour une gestion efficace de flotte.