web-dev-qa-db-fra.com

Renommer des fichiers et des répertoires (Ajouter un préfixe)

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,

106
Rafael

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)

175
CanSpice

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.

72
tchrist

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.

53
Zheng Qsin

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_.

23
Cyclonecode

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 .

8
koyae

Si vous avez Ruby (1.9+)

Ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
7
kurumi

avec Perl:

Perl -e 'rename $_, "PRE_$_" for <*>'
7
tadmc

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: $!";
}
2
Joel Berger

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
1
conradkdotcom

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
0
SteinAir