Je voudrais ajouter un préfixe sur tous les dossiers et répertoires.
Exemple:
J'ai
Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/
J'aimerais ajouter le préfixe "PRE_"
PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/
Cordialement,
Merci à Peter van der Heijden , voici un exemple qui fonctionnera pour les noms de fichiers contenant des espaces:
for f in * ; do mv -- "$f" "PRE_$f" ; done
("-" est nécessaire pour les fichiers commençant par des tirets, dont les noms seraient autrement interprétés comme des commutateurs pour la commande mv)
Utilisez le script rename de cette façon:
$ rename 's/^/PRE_/' *
Il n'y a pas de problèmes de métacaractères ni d'espace dans les noms de fichiers.
Pour ajouter un préfixe ou un suffixe pour les fichiers (répertoires), vous pouvez utiliser le moyen simple et puissant de xargs :
ls | xargs -I {} mv {} PRE_{}
ls | xargs -I {} mv {} {}_SUF
Il utilise l'option de remplacement des paramètres de xargs: -I. Et vous pouvez obtenir plus de détails à partir de la page de manuel.
Cela pourrait être fait en exécutant une simple commande find
:
find * -maxdepth 0 -exec mv {} PRE_{} \;
La commande ci-dessus préfixera tous les fichiers et dossiers du répertoire en cours avec PRE_
.
Pour ajouter un préfixe à tous les fichiers et dossiers du répertoire en cours en utilisant la variable rename
de util-linux (par opposition à prename
, la variante Perl de Debian et de certains autres systèmes), vous pouvez procéder comme suit:
rename '' <prefix> *
Cela trouve la première occurrence de la chaîne vide (qui se trouve immédiatement), puis remplace cette occurrence par votre préfixe, puis se colle au reste du nom du fichier à la fin de celle-ci. Terminé.
Pour suffixes, vous devez utilisez la version Perl ou utilisez find .
Si vous avez Ruby (1.9+)
Ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
avec Perl:
Perl -e 'rename $_, "PRE_$_" for <*>'
Voici un script simple que vous pouvez utiliser. J'aime utiliser le module non standard File::chdir
pour gérer la gestion des opérations cd
. Pour utiliser ce script tel quel, vous devez l'installer (Sudo cpan File::chdir
).
#!/usr/bin/Perl
use strict;
use warnings;
use File::Copy;
use File::chdir; # allows cd-ing by use of $CWD, much easier but needs CPAN module
die "Usage: $0 dir prefix" unless (@ARGV >= 2);
my ($dir, $pre) = @ARGV;
opendir(my $dir_handle, $dir) or die "Cannot open directory $dir";
my @files = readdir($dir_handle);
close($dir_handle);
$CWD = $dir; # cd to the directory, needs File::chdir
foreach my $file (@files) {
next if ($file =~ /^\.+$/); # avoid folders . and ..
next if ($0 =~ /$file/); # avoid moving this script if it is in the directory
move($file, $pre . $file) or warn "Cannot rename file $file: $!";
}
Sur mon système, je n'ai pas la commande rename
. Voici un simple paquebot. Il trouve tous les fichiers HTML de manière récursive et ajoute prefix_
devant leurs noms:
for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
Cela préfixera vos fichiers dans leur répertoire.
Le ${f%/*}
est le chemin jusqu'à la dernière barre oblique /
-> le répertoire
Le ${f##*/}
est le texte sans rien avant la dernière barre oblique /
-> nom du fichier sans le chemin
Voilà comment ça se passe:
for f in $(find /directory/ -type f); do
mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done