Informations :
Dates
- Publish : : Thursday 25 april 2019
- Modification : Thursday 25 april 2019
- 1325 views
Share :
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;
023do
024# 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} ];
032then
033 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.txt
044echo " Fichier renommé !"
045echo ""
046echo "//------------"
047echo ""
048fi
049 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.txt
003touch file1245.www.tutu.com.txt
004touch 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 ?