Renommer les fichiers et les répertoires (Ajouter un préfixe))
j'aimerais 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/
je voudrais ajouter le préfixe "PRE_ "
PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/
Cordialement,
10 réponses
merci à Peter van der Heijden , voici un qui va travailler pour les noms de fichiers avec des espaces en eux:
for f in * ; do mv -- "$f" "PRE_$f" ; done
("--" est nécessaire pour réussir avec les fichiers qui commencent par des tirets, dont les noms seraient autrement interprétés comme des commutateurs pour la commande mv)
Utiliser le renommer script de cette façon:
$ rename 's/^/PRE_/' *
il n'y a pas de problèmes avec metacharacters ou whitespace dans les noms de fichiers.
pour ajouter le préfixe ou le suffixe pour les fichiers (répertoires), vous pouvez utiliser le moyen simple et puissant par xargs :
ls | xargs -I {} mv {} PRE_{}
ls | xargs -I {} mv {} {}_SUF
il utilise l'option paramerter-replacing 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éfixe tous les fichiers et dossiers dans le répertoire courant PRE_
.
pour ajouter un préfixe à tous les fichiers et dossiers du répertoire courant en utilisant rename
d'util-linux (par opposition à prename
, la variante perl de Debian et de certains autres systèmes), vous pouvez faire:
rename '' <prefix> *
trouve la première occurrence de la chaîne vide (qui se trouve immédiatement) et remplace ensuite cette occurrence par votre préfixe, puis colle sur le reste du nom de fichier à la fin de cela. Faire.
pour suffixes , vous devez utiliser la version perl ou utiliser trouver .
si vous avez Ruby (1.9+)
ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
Voici un script simple que vous pouvez utiliser. J'aime utiliser le module non standard File::chdir
pour gérer les opérations cd
, donc pour utiliser ce script tel quel, vous devrez 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: "151900920" 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 ("151900920" =~ /$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 exemple simple d'un liner. Il trouve tous les fichiers HTML de façon récursive et ajoute prefix_
devant leur nom:
for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
ceci préfixe 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 le dernier slash /
-> nom de fichier sans le chemin d'accès
Donc, c'est comment il va:
for f in $(find /directory/ -type f); do
mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done