Script qui fonctionne, mais - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 10-02-2004 à 19:53:37
tu enlèves les 2 premières lignes que tu remplaces simplement par :
[ "$1" != "" ] && folder="$1"
edit : la vache la synchro c'est rare
Marsh Posté le 10-02-2004 à 20:45:06
super, merci ca marche super bien...
un autre chose, si le dossier contient des sous-dossiers, le script fonctionne...
mais si le dossier contient des dossiers ET des sous-dossiers, le script copie les fichiers dans le répertoire parent et efface quand même le sous-dossier...
Marsh Posté le 11-02-2004 à 10:36:04
Je vois tout d'abord trois problèmes avec ta boucle 'for file in $folder/*'
1) Si le répertoire est vide, tu récupères "$folder/*" dans la variable 'file'.
Du coup tu vas avoir une erreur sur le cat ou le cp (qui devrait être 'cp $file $folder/..')
Pour éviter ça :
for file in $(ls -1 $folder)
2)Tu ne prends pas en compte les fichiers dont le nom commence par '.' (exemple .profile), ces derniers ne sont donc pas déplacés.
Si tu veux les prendre en compte il te faut faire :
for file in $(ls -1a $folder | grep -Ev '^(\.|\.\.)$')
3) Si ton répertoire contient des sous-répertoires, tu risque d'avoir des problèmes.
Si un fichier existe déjà avec le nom du sous-répertoire, tu vas faire un cat du sous-répertoire ce qui n'a aucun sens.
Dans ta dernière boucle 'for subfold in $folder/*' tu supprime le répertoire s'il contient encore un fichier et comme tu laisses en places les fichiers '.*' ...
En effet si le fichier $folder/.profile existe :
subfold=$folder/.profile
[ ! -f $subfold ]= Faux
[ -d $subfold ] = Faux
[ ! -f $subfold ] || [ -d $subfold ] = Faux
Donc rm -rf $folder
Si tu veux supprimer le contenu du répertoire s'il ne contient plus de fichiers ni de sous-répertoire :
if [ -z "$(ls -1a $folder) ] ; then
rm -rf $folder
fi
Marsh Posté le 10-02-2004 à 19:47:29
J'ai écrit un script qui prend un nombre variable de paramètres (qui sont des répertoires existants dans le répertoire courant).
Pour chaque répertoire, ca déplace tous ses fichiers dans le répertoire courant et si les noms de fichier sont identiques, ca concatene dans le répertoire courant. Quand les répertoires nommés sont vides, il sont détruit.
Ca fonctionne (enfin, je crois) mais est-ce que ca serait possible, au lieu de:
-%./script.sh
Quel dossier voulez vous nettoyer?
ca serait:
-%./script. dossierpournettoyer
?
voici le script: