Переименовать файлы и каталоги (добавить префикс) - PullRequest
111 голосов
/ 25 января 2011

Я хотел бы добавить префикс для всех папок и каталогов.

Пример:

У меня есть

Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/

Я хотел бы добавить префикс "PRE _"

PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/

С уважением,

Ответы [ 10 ]

184 голосов
/ 25 января 2011

Благодаря Питер ван дер Хейден , вот тот, который будет работать для имен файлов с пробелами в них:

for f in * ; do mv -- "$f" "PRE_$f" ; done

("-" требуется для успешного выполнения файлов, начинающихся с тире, имена которых иначе интерпретировались бы как ключи для команды mv)

75 голосов
/ 25 января 2011

Используйте переименовать скрипт следующим образом:

$ rename 's/^/PRE_/' *

Нет проблем с метасимволами или пробелами в именах файлов.

54 голосов
/ 07 декабря 2012

Для добавления префикса или суффикса для файлов (каталогов), вы можете использовать простой и мощный способ: xargs :

ls | xargs -I {} mv {} PRE_{}

ls | xargs -I {} mv {} {}_SUF

Используется опция замены параметров в xargs: -I. И вы можете получить более подробную информацию из справочной страницы.

26 голосов
/ 23 октября 2015

Это можно сделать, выполнив простую команду find:

find * -maxdepth 0 -exec mv {} PRE_{} \;

Приведенная выше команда префиксует все файлы и папки в текущем каталоге с PRE_.

7 голосов
/ 29 января 2016

Чтобы добавить префикс ко всем файлам и папкам в текущем каталоге, используя rename util-linux (в отличие от prename, варианта perl из Debian и некоторых других систем), вы можете сделать:

rename '' <prefix> *

Это находит первое вхождение пустой строки (которое сразу же обнаруживается), а затем заменяет это вхождение вашим префиксом, а затем склеивает оставшуюся часть имени файла до конца этого.Готово.

Для суффиксов необходимо использовать версию perl или использовать find .

7 голосов
/ 25 января 2011

с Perl:

perl -e 'rename $_, "PRE_$_" for <*>'
7 голосов
/ 25 января 2011

Если у вас есть Ruby (1.9 +)

ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
2 голосов
/ 25 января 2011

Вот простой скрипт, который вы можете использовать. Мне нравится использовать нестандартный модуль File::chdir для управления cd операциями, поэтому чтобы использовать этот скрипт как есть, вам нужно его установить (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: $!";
}
1 голос
/ 14 августа 2014

В моей системе у меня нет команды rename. Вот простой вкладыш. Он находит все файлы HTML рекурсивно и добавляет prefix_ перед их именами:

for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
0 голосов
/ 11 января 2018

Это префикс ваших файлов в их каталоге.

${f%/*} - это путь до последней косой черты / -> каталог

${f##*/} - это текст безчто-нибудь до последней косой черты / -> имя файла без пути

Вот так:

for f in $(find /directory/ -type f); do 
  mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...