Informations :
Dates
- Publish : : Thursday 25 april 2019
- Modification : Thursday 25 april 2019
- 1407 views
Share :
Modifier le nom de plusieurs fichiers en ligne de commandes.
Script avec 52 lignes
001#!/bin/bash002#--------------------------------------------------------------------003# Auteur : LAB3W : O.Romain Jaillet-ramey (orj@lab3w.fr)004#005# Description : Rename remake006# Modifier les fichiers txt AWStats des domains007#008# Date Create : 2019-04-25009# Date Modify : 2019-04-25010#011#---------------------------------------------------------------------012 013#DOMAIN_SEARCH=$1014DOMAIN_SEARCH="howto.zw3b.fr"015#DOMAIN_REPLACE=$2016DOMAIN_REPLACE="howto.zw3b.net"017 018DIR="/var/lib/awstats/";019#DIR="/root/2/3/";020 021echo "SEARCH : $DOMAIN_SEARCH"022for i in ${DIR}*.txt;023do024# id=`echo $i | cut -d/ -f11`;025file="`echo $i | cut -d/ -f5`"026filedate="`echo $file |cut -d. -f1`"027domain=`echo $file |awk -F[.] '{print $2"."$3"."$4}'`028 029echo " Fichier $domain de $filedate non recherché"030 031if [ "${domain}" = ${DOMAIN_SEARCH} ];032then033 034echo "//------------"035echo "// Domain OK : $domain"036echo ""037domain_new="${DOMAIN_REPLACE}"038echo "Fichier : $i"039echo " |"040echo " +-→ $file == $filedate.$domain.txt"041echo " +-→ $file => $filedate.$domain_new.txt";042echo ""043mv $DIR/$filedate.$domain.txt $DIR/$filedate.$domain_new.txt044echo " Fichier renommé !"045echo ""046echo "//------------"047echo ""048fi049 050done;051 052#-----------------------------------------------------------------------------------
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
001Par exemple avec les commandesmkdir temp/002touch file1255.www.toto.com.txt003touch file1245.www.tutu.com.txt004touch file1265.www.toto.com.txt
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 ' '
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'
Au final : en 1 seule commande rename
Script avec 1 ligne
001rename -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
Liens Web :
- [peteryu.ca] Batch rename files by finding and replacing terms in the filename
- Debian-FR.org : Remplacer les espaces par un underscore ?

