Как переименовать эти файлы с regex?

Я не могу написать regex код для этого. Microsoft Windows изменила имена моих файлов, и я хочу удалить дату из этого, называет.

Как я могу сделать это? (Имена ниже.)

icon-culture (2015_09_04 06_58_44 UTC).png
icon-disk (2015_09_04 06_58_44 UTC).png
icon-download (2015_09_04 06_58_44 UTC).png
icon-drop (2015_09_04 06_58_44 UTC).png
icon-file (2015_09_04 06_58_44 UTC).png
icon-film (2015_09_04 06_58_44 UTC).png
icon-flag (2015_09_04 06_58_44 UTC).png
icon-folder (2015_09_04 06_58_44 UTC).png
icon-garbage (2015_09_04 06_58_44 UTC).png
icon-graph (2015_09_04 06_58_44 UTC).png
icon-heart (2015_09_04 06_58_44 UTC).png
icon-help (2015_09_04 06_58_44 UTC).png
icon-lock (2015_09_04 06_58_44 UTC).png
icon-map (2015_09_04 06_58_44 UTC).png
icon-media (2015_09_04 06_58_44 UTC).png
icon-money (2015_09_04 06_58_44 UTC).png
icon-monitor (2015_09_04 06_58_44 UTC).png
icon-notes (2015_09_04 06_58_44 UTC).png
icon-openmail (2015_09_04 06_58_44 UTC).png
icon-phone (2015_09_04 06_58_44 UTC).png
icon-photo (2015_09_04 06_58_44 UTC).png

Учебные руководства не преуспели для меня. Поскольку существует некоторый специальный символ и объединенные числа.

6
задан 14 March 2016 в 03:05

4 ответа

Можно использовать rename команда:

$ rename -n 's/ \(.*?\)//' *.png
icon-culture (2015_09_04 06_58_44 UTC).png renamed as icon-culture.png
icon-disk (2015_09_04 06_58_44 UTC).png renamed as icon-disk.png
icon-download (2015_09_04 06_58_44 UTC).png renamed as icon-download.png
icon-drop (2015_09_04 06_58_44 UTC).png renamed as icon-drop.png
icon-file (2015_09_04 06_58_44 UTC).png renamed as icon-file.png
icon-film (2015_09_04 06_58_44 UTC).png renamed as icon-film.png
icon-flag (2015_09_04 06_58_44 UTC).png renamed as icon-flag.png
icon-folder (2015_09_04 06_58_44 UTC).png renamed as icon-folder.png
icon-garbage (2015_09_04 06_58_44 UTC).png renamed as icon-garbage.png
icon-graph (2015_09_04 06_58_44 UTC).png renamed as icon-graph.png
icon-heart (2015_09_04 06_58_44 UTC).png renamed as icon-heart.png
icon-help (2015_09_04 06_58_44 UTC).png renamed as icon-help.png
icon-lock (2015_09_04 06_58_44 UTC).png renamed as icon-lock.png
icon-map (2015_09_04 06_58_44 UTC).png renamed as icon-map.png
icon-media (2015_09_04 06_58_44 UTC).png renamed as icon-media.png
icon-money (2015_09_04 06_58_44 UTC).png renamed as icon-money.png
icon-monitor (2015_09_04 06_58_44 UTC).png renamed as icon-monitor.png
icon-notes (2015_09_04 06_58_44 UTC).png renamed as icon-notes.png
icon-openmail (2015_09_04 06_58_44 UTC).png renamed as icon-openmail.png
icon-phone (2015_09_04 06_58_44 UTC).png renamed as icon-phone.png
icon-photo (2015_09_04 06_58_44 UTC).png renamed as icon-photo.png

s/ \(.*?\)// простое, если широко, выражение, соответствуя пространству, сопровождаемому включенным в круглые скобки материалом. Можно выбрать более точные выражения как:

  • s/ \(.*?\)\.png$/.png/ - как предыдущее, но соответствие, только если сопровождаемый .png и конец имени файла, или
  • s/ \(\d{4}(_\d\d){2} \d\d(_\d\d){2} UTC\)\.png/.png/ - соответствие шаблону даты, показанному в этих файлах и сопровождаемому .png.

-n опция для тестирования команды. Выполненный без него, если Вы удовлетворены результатами.

14
ответ дан 23 November 2019 в 07:15

Используя bash расширение параметра:

for file in *.png; do mv -i "$file" "${file%% *}".png; done

${file%% *} отбросит нежелательную часть имени файла, начинающего с пространства. Затем расширение .png добавляется после имени файла в то время как mv - луг.

4
ответ дан 23 November 2019 в 07:15

Вы могли попробовать следующий фрагмент кода Python

import os
import glob
files = glob.glob('*')
for file in files:
    var1 = file.find(' (')
    var2 = file.find(')')+1
    filename = file[:var1] +  file[var2:]
    os.rename(file, filename)
  • , шарик находит все файлы, которые удовлетворяют regex аргумент
  • , Вы выполняете итерации через список и изменяете название файла
  • rename, меняет имя файла
3
ответ дан 23 November 2019 в 07:15

Используя bash и расширение параметра, выполненное следующий код из того же каталога, где у Вас есть файлы.

for file in *.png ; do NAME="${file%%\ \(*}"; EXT="${file##*.}" ; mv "$file" "$NAME"."$EXT"   ; done  

Образец выполняется

$> ls                                                                                                                             
icon-culture (2015_09_04 06_58_44 UTC).png  icon-disk (2015_09_04 06_58_44 UTC).png
$> for file in *.png ; do NAME="${file%%\ \(*}"; EXT="${file##*.}" ; mv "$file" "$NAME"."$EXT"   ; done                               
$> ls
icon-culture.png  icon-disk.png
3
ответ дан 23 November 2019 в 07:15

Другие вопросы по тегам:

Похожие вопросы: