Remove character pattern at beginning and end of filenames

Я нашел этот документ, который я сделал однажды:

Щелкните правой кнопкой мыши на панели задач и выберите "Добавить в панель...". ". Затем выберите "Custom Application Launcher" и нажмите "Add".

Введите информацию:

Тип: Application

Name: application name

Command: команда для запуска приложения

Комментарий: любой комментарий

enter image description here

PS: в своем комментарии я сказал, что вы можете выбрать иконку, но похоже, что нет, извините :/

1
31.05.2019, 00:54
3 ответа

Вот решение с использованиемsed

for i in *
do
    mv $i $( echo $i | sed 's/p[[:digit:]]*\.\([^#]*\)\#.*/\1/' )
done

Адресат создается с помощью sedпутем поиска p, за которым следует любое количество цифр, за которым следует точка. Символы от точки и далее до символа #запоминаются в регистре, и все имя файла заменяется запомненными символами .

-1
27.01.2020, 23:41

Если у вас есть perlверсия rename(, иногда называемая ранее prename), вы можете применить замену регулярного выражения:

rename -n 's/^.*?\.(.*?)#.*/$1/' *

Если вы не понимаете регулярные выражения, (RE ), их стоит изучить.

  • s/xx/yy/-заменить xxнаyy
  • ^-соответствует неявному началу -строки -
  • .*?-соответствует как можно более короткой строке из ноль или более символов чего-либо при условии соответствия остальной части шаблона
  • \.-соответствует буквальной точке.(символ .представляет что угодно , но \.является буквальной точкой)
  • (... )сопоставить шаблон внутри скобок и присвоить ему номер совпадения 1..9; позже упомянутый$1(второй (... )будет $2и т. д.)
  • #-буквенный символ
  • .*-самое длинное совпадение, которое составляет ноль или более символов чего-либо(.равно чему угодно и *означает _ноль или более предшествующего элемента)
  • ]

Удалите-n("нет действий" ), когда вы будете уверены, что это будет работать. Замените его на -v, чтобы увидеть, что на самом деле происходит, или просто опустите его для бесшумной работы.

2
27.01.2020, 23:41

Вот awkскрипт, выполняющий эту задачу:

Только для печати/отладки:

awk 'match($0,/(^[^\\.]+.)([^#]+)/,m){print "mv "$0" "m[2] }' input.txt    

Переименовать:

awk 'match($0,/(^[^\\.]+.)([^#]+)/,m){system("mv "$0" "m[2])}' input.txt    

input.txt

p1.uniquenameA#blah_a
p2.uniquenameB#blah_b
p3.uniquenameC#blah_c
p4.uniquenameD#blah_d
p5.uniquenameE#blah_e
p6.uniquenameF#blah_f
p7.uniquenameG#blah_g
p8.uniquenameH#blah_h
p9.uniquenameI#blah_i
p10.uniquenameJ#blah_j

выход

mv p1.uniquenameA#blah_a uniquenameA
mv p2.uniquenameB#blah_b uniquenameB
mv p3.uniquenameC#blah_c uniquenameC
mv p4.uniquenameD#blah_d uniquenameD
mv p5.uniquenameE#blah_e uniquenameE
mv p6.uniquenameF#blah_f uniquenameF
mv p7.uniquenameG#blah_g uniquenameG
mv p8.uniquenameH#blah_h uniquenameH
mv p9.uniquenameI#blah_i uniquenameI
mv p10.uniquenameJ#blah_j uniquenameJ
0
27.01.2020, 23:41

Теги

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