Назад | Перейти на главную страницу

Linux переименовывает файлы, чтобы добавить _00 после имени файла перед расширением

Что мне здесь не хватает, это кажется таким простым, но я не могу заставить его работать.

У меня есть каталог с такими файлами, как AGPNDRAH01.jpg

Мне нужен каталог с такими файлами, как AGPNDRAH01_00.jpg

rename 's/(\w+).jpg\$1\_00.jpg$//' *

Не работает. Centos Linux. Мне не понятно, почему это не работает.

Быстрый взлом, который сделает то, что вы описываете в bash:

cd /directory
for F in `ls -1 |awk -F. '{print $2}'`
do
  mv $F.jpg ${F}_00.jpg
done

Для использования переименования:

wmoore@bitbucket(/tmp/dowork)$ ls -1
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
wmoore@bitbucket(/tmp/dowork)$ rename .jpg _00.jpg *.jpg
wmoore@bitbucket(/tmp/dowork)$ ls -1
1_00.jpg
2_00.jpg
3_00.jpg
4_00.jpg
5_00.jpg

Попробуйте следующий сценарий bash:

find . -type f -name "*.jpg" -print | while read FILE  
  do mv "${FILE}" "`dirname ${FILE}`/`basename ${FILE} .jpg`_00.jpg"
  done

Это найдет все файлы .jpg в текущем каталоге или ниже и вставит _00 перед .jpg. Если вы хотите, чтобы он обрабатывал только текущий каталог, запустите команду поиска с find . -maxdepth 1

Двойная обратная косая черта в конце регулярного выражения означает sинститут s / (\ w +). jpg $ 1_00.jpg $ с пустой строкой.

Я использовал это:

rename 's/\.jpg/_00.jpg/' *.jpg

Я не знаком с переименованием, но ваше регулярное выражение выглядит неправильно. Похоже, вы пытаетесь сопоставить файлы с таким именем AGPNDRAH01.jpg.AGPNDRAH01_00.jpg и ни на что не поменять свое имя.

Вы уверены, что вместо этого имеете в виду что-то подобное?

rename 's/(\w+).jpg$/\$1\_00.jpg/' *

У меня есть вариант redhat, и переименование не поддерживает команду s /. Вот вам однострочный (вы должны использовать обратную косую черту и знаки плюса, чтобы получить функциональность в sed):

for fl in *.jpg; do mv $fl `echo $fl | sed 's/\(\w\+\).jpg/\1_00.jpg/'`; done

У вас просто неправильная косая черта и ненужная обратная косая черта.

rename 's/(\w+).jpg/$1\_00.jpg/' *