Моя текущая задача переименовывает множество файлов по нескольким каталогам в разные идентификаторы.Как извлечь определенные части пути и имени файла в linux
Поэтому у меня есть несколько каталогов, таких как: b01, b02, b03 и т.д. В каждом каталоге есть имена файлов, такие как img01.23495.png, img01.3596596.png, img02.2399495.png и т.д.
Мне нужно переименовать img01 из b01 в другой идентификатор. Таким образом, идентификатор зависит от имени каталога и первой части имени файла.
Мои мысли о конвейере таковы: получить все имена файлов png, извлечь папку, в которой она находится, извлечь часть img ## и сохранить информацию в файле, поэтому я бы получил файл с чем-то вроде :
b01 img01
b01 img02
b02 img01
...
Это полезно, так что я могу указать послесловие, что новый идентификатор в качестве третьего столбца, а затем прочитать в файле, чтобы выполнить фактическое переименование.
В настоящее время у меня есть пути, такие как ./images/something/b01/img01.2342394.png.
Чтобы получить список, я в настоящее время пытается что-то вроде find . | grep png | something sed | sort | uniq > indentifiers.txt
Я застрял на sed
части, однако. Также приветствуются любые предложения делать то, что я пытаюсь сделать.
'find. -name "* .png" | sed 's /^ .* \/\ ([^ \ /] * \) \/\ ([^ \ /] * \) \ .png $/\ 1 \ 2/| sort -u'? Это кажется ненужным по сравнению с итерацией. Вам будет интересно написать фактический скрипт или функцию, которая делает это все сразу? – FrankieTheKneeMan
Спасибо! Я нашел хороший сайт, чтобы сделать некоторые эксперименты в regexp, и изменил ваше регулярное выражение на
find . -name "*.png" | sed 's/^.*\/\([^\/]*\)\/\(img[0-9][0-9]\)\([^\/]*\)\.png$/\1 \2/ | sort -u
. Что вы подразумеваете под итерацией? – vsectorЯ просто имею в виду, что переходить через список дважды кажется ненужным. – FrankieTheKneeMan