ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, SHells, Renommer plusieurs fichiers : commands rename for cut sed awk paste

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

Author : O.Romain.Jaillet-ramey

Modifier le nom de plusieurs fichiers en ligne de commandes.

Script avec 52 lignes

001#!/bin/bash
002#--------------------------------------------------------------------
003# Auteur : LAB3W : O.Romain Jaillet-ramey (orj@lab3w.fr)
004#
005# Description : Rename remake 
006# Modifier les fichiers txt AWStats des domains
007#
008# Date Create : 2019-04-25
009# Date Modify : 2019-04-25
010#
011#---------------------------------------------------------------------
012
013#DOMAIN_SEARCH=$1
014DOMAIN_SEARCH="howto.zw3b.fr"
015#DOMAIN_REPLACE=$2
016DOMAIN_REPLACE="howto.zw3b.net"
017
018DIR="/var/lib/awstats/";
019#DIR="/root/2/3/";
020
021echo "SEARCH : $DOMAIN_SEARCH"
022for i in ${DIR}*.txt;
023        do
024#               id=`echo $i | cut -d/ -f11`;
025                file="`echo $i | cut -d/ -f5`"
026                filedate="`echo $file |cut -d. -f1`"
027                domain=`echo $file |awk -F[.] '{print $2"."$3"."$4}'`
028
029                echo "          Fichier $domain de $filedate non recherché"
030
031                if [ "${domain}" = ${DOMAIN_SEARCH} ];
032                then
033
034                        echo "//------------"
035                        echo "// Domain OK : $domain"
036                        echo ""
037                        domain_new="${DOMAIN_REPLACE}"
038                        echo "Fichier : $i"
039                        echo "        |"                
040                        echo "        +--> $file == $filedate.$domain.txt"
041                        echo "        +--> $file => $filedate.$domain_new.txt";
042                        echo ""
043                        mv $DIR/$filedate.$domain.txt $DIR/$filedate.$domain_new.txt
044                        echo "        Fichier renommé !"
045                        echo ""
046                        echo "//------------"
047                        echo ""         
048                fi
049
050done;
051
052#-----------------------------------------------------------------------------------
Retirer les numéros de lignes

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

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

Script avec 4 lignes

001mkdir temp/
002touch file1255.www.toto.com.txt
003touch file1245.www.tutu.com.txt
004touch file1265.www.toto.com.txt
Retirer les numéros de lignes

Par exemple avec les commandes paste et sed

Script avec 1 ligne

001paste <(ls *.txt| sed 's/^/move "/;s/$/"/') <(ls *.txt |sed 's/^/"/;s/$/"/;s/toto.com/tata.net/g') -d ' '
Retirer les numéros de lignes

Ou encore plus simplement avec sed et awk

Script avec 1 ligne

001ls *.txt | awk '{print("move "$1 " "$1)}' | sed 's/toto.com/tata.com/2'
Retirer les numéros de lignes
Au final : en 1 seule commande rename

Script avec 1 ligne

001rename -nono 's/toto.com/tata.com/' *.txt
Retirer les numéros de lignes

-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 :