Mode console, scripts BASH, SH

 Charge moyenne sur 1mn : 0.70 Charge moyenne sur 5mn : 0.67 Charge moyenne sur 15mn : 0.62


Comment utiliser la console, se faire des scripts BASH, SHells ?

Faire des scripts BASH, SHells ! Utiliser les fichiers utilisateurs comme le .bashrc et le .profile.





Blocs utilisateurs du site : Infos du compte / droits utilisateurs / récapitulatif

Identifiez-vous

Authentifiez-vous avec votre compte ZW3B et profitez des services membres.

Identifiant :
Mot de passe :
  
  

Renommer plusieurs fichiers : commands rename for cut sed awk paste

Comment-faire pour renommer plusieurs fichiers en une seule ligne de commande.

Informations

Dates
  • Publication : Jeudi 25 avril 2019
  • Modification : Jeudi 25 avril 2019

Modifier le nom de plusieurs fichiers en ligne de commandes.

#!/bin/bash
#--------------------------------------------------------------------
# Auteur : LAB3W : O.Romain Jaillet-ramey (orj@lab3w.fr)
#
# Description : Rename remake 
# Modifier les fichiers txt AWStats des domains
#
# Date Create : 2019-04-25
# Date Modify : 2019-04-25
#
#---------------------------------------------------------------------

#DOMAIN_SEARCH=$1
DOMAIN_SEARCH="howto.zw3b.fr"
#DOMAIN_REPLACE=$2
DOMAIN_REPLACE="howto.zw3b.net"

DIR="/var/lib/awstats/";
#DIR="/root/2/3/";

echo "SEARCH : $DOMAIN_SEARCH"
for i in ${DIR}*.txt;
        do
#               id=`echo $i | cut -d/ -f11`;
                file="`echo $i | cut -d/ -f5`"
                filedate="`echo $file |cut -d. -f1`"
                domain=`echo $file |awk -F[.] '{print $2"."$3"."$4}'`

                echo "          Fichier $domain de $filedate non recherché"

                if [ "${domain}" = ${DOMAIN_SEARCH} ];
                then

                        echo "//------------"
                        echo "// Domain OK : $domain"
                        echo ""
                        domain_new="${DOMAIN_REPLACE}"
                        echo "Fichier : $i"
                        echo "        |"                
                        echo "        +--> $file == $filedate.$domain.txt"
                        echo "        +--> $file => $filedate.$domain_new.txt";
                        echo ""
                        mv $DIR/$filedate.$domain.txt $DIR/$filedate.$domain_new.txt
                        echo "        Fichier renommé !"
                        echo ""
                        echo "//------------"
                        echo ""         
                fi

done;

#-----------------------------------------------------------------------------------

On peut faire la même chose en une seule ligne de code.

Pour tester on va créer un dossier et 3 fichiers :

mkdir temp/
touch file1255.www.toto.com.txt
touch file1245.www.tutu.com.txt
touch file1265.www.toto.com.txt

Par exemple avec les commandes paste et sed

paste <(ls *.txt| sed 's/^/move "/;s/$/"/') <(ls *.txt |sed 's/^/"/;s/$/"/;s/toto.com/tata.net/g') -d ' '

Ou encore plus simplement avec sed et awk

ls *.txt | awk '{print("move "$1 " "$1)}' | sed 's/toto.com/tata.com/2'
Au final : en 1 seule commande rename
rename -nono 's/toto.com/tata.com/' *.txt

-nono permet d'essayer la commande avant de renommer les fichiers.


How'to Optimize Code ;p ;) Kss* - Merci #josephtux




Cordialement,
Romain


<< Modifier une expression dans plusieurs fichiers : commande for + sed

Couper, fractionner une date YYYYMMDD >>


Liens Web :





Autheur de la page

LAB3W.ORJ

LAB3W.ORJ

  • Prénom : Olivier Romain Luc
  • Nom : Jaillet-ramey
  • Arrivé le mardi 19 octobre 1976 (1976/10/19 00:00)
    44 ans d'activité !

Firefox Nighlty

Nos amis de Framasoft s'intéressent à Mozilla et leur ont posé des questions à propos de Nightly : Firefox Night-club, entrée libre !






Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready