Скобки в имени файла - пакетное преобразование - PullRequest
0 голосов
/ 18 октября 2018

У меня есть несколько файлов, которые содержат круглые скобки, например

long_file_name (12).txt 

(обратите внимание на пробел перед числом). Я хотел бы извлечь все числа из имен файлов.Как я могу это сделать?Я нашел эту ветку stackoverflow link , но это не помогло - проблема в том, что я хочу присвоить имя файла переменной, а не изменять каждый из файлов в отдельности.

Спасибо зався помощь

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Если вы хотите переименовать все файлы с круглыми скобками в их filenanme, вы можете использовать этот скрипт bash:

cd /path/to/my/files
for i in *; do
   [[ -f "$i" ]] && { [[ "$i" == "${i/ (*)/}" ]] || mv -v "$i" "${i/ (*)/}"; }
done

Он просматривает все файлы в каталоге и проверяет, содержит ли имя файла круглые скобки.Если да, переименование завершено.

Вместо этого, если вы хотите переименовать файлы по их номеру, используйте это:

for i in *; do
   if [[ -f "$i" ]]; then 
     newname=$(echo "$i" | sed 's/.*(\([^)]\+\))[^.]*\(.*\)$/\1\2/')
     [[ "$newname" == "$i" ]] || mv -v "$i" "$newname"
   fi
done
0 голосов
/ 18 октября 2018

Если предположить, что соглашение о присвоении имен вашему файлу остается таким: long_file_name ([0-9][0-9]).txt, то вы можете записать имена файлов в переменную, используя команду find.

cd /path/to/files/
var=$(find . -type f -name "long_file_name ([0-9][0-9]).txt"|sed 's,^./,,g')
echo "${var}" |rev |cut -c6-7 |rev

Это даст числа внутри имен_файлов

0 голосов
/ 18 октября 2018

Вы можете сделать это в bash, используя переменную интерполяцию / замену:

$ F="long_file_name (12).txt"
$ echo ${F/*(/}
12).txt
$ G=${F/*(/}; echo ${G/)*/}
12
$ G=${F/*(/}; H=${G/)*/}; echo $H
12
$

Короче говоря, это даст вам только число в скобках из имени файла:

F="long_file_name (12).txt"
G=${F/*(/}; H=${G/)*/}; echo $H

Если у вас есть имена файлов в других форматах, предоставьте больше примеров для тестирования.

...