Вот как это происходит:

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

Пример:

у меня есть

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/

С Уважением,

 Mark15 янв. 2019 г., 19:20
Используйте AWK как наэто ответ: awk '$ 0 = "префикс" $ 0' file> new_file

Ответы на вопрос(10)

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

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

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

 CanSpice24 янв. 2011 г., 22:37
Хех, правда, это совершенно не будет работать, если у вас есть файл с пробелом в нем.
 Felipe26 февр. 2016 г., 19:14
Спасибо друг. Стажер здесь терял пальцы, переименовывая все 67 файлов. Приветствия.
 Alnitak24 янв. 2011 г., 22:35
остерегайтесь имен файлов с пробелами в них ...
 Peter van der Heijden24 янв. 2011 г., 22:45
Если вы изменитеls командовать* и поставить двойные кавычки вокруг аргументовmv, это будет работать для файлов, содержащих пробелы.
 Pascal Qyy07 июл. 2012 г., 11:46
@CanSpice Можно ли отменить эту операцию (удалить префикс) с помощью аналогичного сценария?

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

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

Вот как это происходит:

for f in $(find /directory/ -type f); do 
  mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done

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

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

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

for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
 DJCrashdummy08 сент. 2018 г., 08:33
с участиемfind Вы также можете выполнять команды, без необходимости цикла:stackoverflow.com/a/33297439/2351568

который вы можете использовать. Мне нравится использовать нестандартный модуль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: $!";
}

с Perl:

perl -e 'rename $_, "PRE_$_" for <*>'

Это может быть сделано с помощью простогоfind команда:

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

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

использованиепереименовать скрипт сюда:

$ rename 's/^/PRE_/' *

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

 Alan Haggai Alavi12 февр. 2011 г., 18:17
rename всегда помогал мне легко справляться с несколькими переименованиями файлов.
 Dennis Williamson25 янв. 2011 г., 00:07
В некоторых системах есть утилита util-linux под названием «переименование», которая работает по-другому (в Ubuntu она называется «rename.ul»).

мощью утилиты util-linuxrename (в отличие отprenameвариант Perl из Debian и некоторых других систем), вы можете сделать:

rename '' <prefix> *

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

Засуффиксы, тебе следуетиспользуйте версию perl или жеиспользовать найти.

 user133806213 дек. 2018 г., 06:39
util-linux на Debian Stretch, кажется, обеспечивает это как/usr/bin/rename.ul.

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

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

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

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

 Acewin19 нояб. 2013 г., 20:05
интересно использование переименования не сработало. использование xargs прошло хорошо для моей установки RHEL, так что +1 для этой опции облегчает понимание команды
 Zheng Qsin07 дек. 2012 г., 10:17
П.С .: Если вы просто хотитепереименовать файлы деталей (каталоги) текущего каталога, просто отфильтруйте его перед xargs, например:ls *.old | xargs -I {} mv {} PRE_{}

Ваш ответ на вопрос