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,

98
demandé sur Alnitak 2011-01-25 00:33:00

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)

159
répondu CanSpice 2018-07-31 22:23:12

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.

71
répondu tchrist 2011-01-24 21:44:11

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.

50
répondu Zheng Qsin 2012-12-07 09:14:15

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

22
répondu Cyclonecode 2018-10-06 19:41:24

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 .

8
répondu koyae 2017-05-23 11:47:01

avec Perl:

perl -e 'rename $_, "PRE_$_" for <*>'
7
répondu tadmc 2011-01-25 14:20:33

si vous avez Ruby (1.9+)

ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
6
répondu kurumi 2011-01-24 23:55:22

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: $!";
}
2
répondu Joel Berger 2011-01-25 16:06:45

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
1
répondu conradkdotcom 2014-08-14 10:04:08

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
0
répondu SteinAir 2018-01-11 17:04:34