Bash - Redondance dans un fichier
Résolu
Remad
Messages postés
1694
Statut
Membre
-
Remad Messages postés 1694 Statut Membre -
Remad Messages postés 1694 Statut Membre -
Bonjour à tous!
Ma question est très simple: Comment faire en bash pour supprimer les lignes redondantes dans un fichier?
J'utilise la fonction
mv -iv $* >> $HOME/backup/.backup
mais lorsque le fichier existe déjà et que je demande à le remplacer, il me rajoute quand même une ligne. Alors qu'il faudrait voir si la ligne existe déjà dans le fichier.
Merci d'avance!
Ma question est très simple: Comment faire en bash pour supprimer les lignes redondantes dans un fichier?
J'utilise la fonction
mv -iv $* >> $HOME/backup/.backup
mais lorsque le fichier existe déjà et que je demande à le remplacer, il me rajoute quand même une ligne. Alors qu'il faudrait voir si la ligne existe déjà dans le fichier.
Merci d'avance!
3 réponses
-
en changeant le flux de redirection peut être ?
un simple au lieu d'un double.
mv -iv $* > $HOME/backup/.backup
au lieu de
mv -iv $* >> $HOME/backup/.backup -
Salut,
Comment faire en bash pour supprimer les lignes redondantes dans un fichier?
sort -u fichier_redondant > fichier_épuré
;-))-
-
Sa fonctionne! maintenant j'ai un nouveau soucis avec la commande mv:
Quand je lance la commandebash ./MSc/Bash/backup ablah.txt blah.txt
Elle execute la fonctionmv -iv $PWD/$* $HOME/backup/ >> $HOME/backup/.backup
mais elle insrit dans le fichier $HOME/backup/.backup ceci:
'blah.txt' -> '/home8/p09267388/backup/blah.txt'
'/home8/p09267388/ablah.txt' -> '/home8/p09267388/backup/ablah.txt'
comment faire pour qu'elle inscrive ceci?
'/home8/p09267388/blah.txt' -> '/home8/p09267388/backup/blah.txt'
'/home8/p09267388/ablah.txt' -> '/home8/p09267388/backup/ablah.txt' -
-
-
Voyez-vous une optimisation possible dans mon code?
#!/bin/bash #Pierre cybard - p09267388 if [ -d $HOME/backup ] #test if a backup directory exists then if [ $# -eq 0 ] #if no parameters then echo -n "No parameters given. Do you want to backup the current folder? Y/N: " read answer if [ $answer == "Y" ] || [ $answer == "y" ] || [ $answer == "Yes" ] || [ $answer == "YES" ] || [ $answer == "yes" ] #Yes = backup the current folder / other = do nothing then chmod -R 700 $HOME/backup #restore the write permission on the folder mv -iv $PWD/ $HOME/backup/ >> $HOME/backup/.backup #move the current folder, add a line on the .backup file sort -u $HOME/backup/.backup > $HOME/backup/.backupTemp #sorting by name, avoiding redundancy, on a temporary file mv $HOME/backup/.backupTemp $HOME/backup/.backup #move the temporary file to the .backup file chmod -R 500 $HOME/backup #restore the limited permissions fi else #if parameters chmod -R 700 $HOME/backup #restore the write permission on the folder for ARG in "$@" #for every parameters do mv -iv $PWD/$ARG $HOME/backup/ >> $HOME/backup/.backup #move the file/folder and add a line on the .backup file done sort -u $HOME/backup/.backup > $HOME/backup/.backupTemp #sorting by name, avoiding redundancy, on a temporary file mv $HOME/backup/.backupTemp $HOME/backup/.backup #move the temporary file to the .backup file chmod -R 500 $HOME/backup #restore the limited permissions fi else #if backup directory do not exists echo "The backup folder do not exist. Please use the initialise function." fi