11

У меня есть группа файлов, которые имеют : (двоеточие) в имени. Мне нужно заменить : на - (тире).

Есть ли простой способ сделать это в сценарии?

Пример имени файла : 2013-10-11:11:52:08_055456663_045585_.txt

5 ответов5

16

Простой 1-лайнер должен делать (предполагается, что Posix sh -совместимая оболочка):

for f in *:*; do mv -v "$f" $(echo "$f" | tr ':' '-'); done

Объяснение:

  • for ... in ...; do ...; done это цикл

  • *:* соответствует всем файлам и каталогам в текущем каталоге, которые имеют : в своем имени

  • f назначается по очереди каждому такому имени файла в цикле

  • mv переименовывает свой первый аргумент во второй; -v (многословно) просит его напечатать, что он делает; эта опция специфична для GNU-утилит , поэтому она доступна в Linux, но не в Solaris

  • $(...) выполняет код в под-оболочке и заменяет вывод

  • echo выводит свой аргумент на стандартный вывод

  • tr читает стандартный вывод и переводит символы в соответствии с прилагаемой картой

Если вы используете bash, вы можете избежать появления дополнительной оболочки ($()) с подпроцессами (tr), заменив $(...) на ${f//:/-}.

6

Как указано в другом моем сообщении, инструмент rename может помочь вам. Вам просто нужно набрать rename s/:/-/ <files to rename> Это заменяет каждое двоеточие тире во всех файлах, которые вы называете в конце, т.е. 2013-10-*

Вот ссылка на мой другой пост

1

Я уверен, что UNIX pro мог бы сделать это с помощью bash, но вот моя быстрая и грязная версия с ruby.

path_to_files = "/home/username/wrongnames/"
filenames = `ls #{path_to_files}`.split
filenames.each do |fn|
  `mv #{path_to_files + fn} #{path_to_files + fn.gsub(/:/, "-")}`
end

установите path_to_files на путь к вашим файлам с ошибочными именами. сохраните приведенный выше код в файле с именем rename.rb, а затем:

username@machinename$ ruby rename.rb
0

Это может быть излишним, но вы можете переименовать любые специальные символы с помощью скрипта по ссылке, приведенной в этом ответе:

https://superuser.com/a/858671/365691

0

используя renamer:

$ renamer --find ":" --replace "-" *

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .