Linux переименовывает файлы на основе другого файла в каталоге?

У меня около 750 каталогов, каждый из которых содержит по два файла:

long_somewhat_random_filename.jpg
thumb.jpg

Я бы хотел использовать find или что-то подобное, чтобы переименовать thumb.jpg в long_somewhat_random_filename_thumb.jpg. Мой мозг немного нечеткий в данный момент.

Я мог бы сделать это с помощью скрипта Perl, но если есть несколько простой способ сделать это в bash, то это проще.


person Rob Williams    schedule 16.12.2010    source источник


Ответы (1)


Попробуйте сценарий ниже. Прямо сейчас echo делает его безопасным, так что вы можете, так сказать, попробовать, прежде чем купить. Если вам нравится то, что вы видите, удалите echo и снова запустите скрипт, чтобы внести изменения.

#!/bin/bash

while read file; do
 echo mv "${file%/*}/thumb.jpg" "${file%.*}_thumb.jpg"
done < <(find . -type f ! -name "thumb.jpg" -name "*.jpg")

Вход

$ find . -type f -name "*.jpg"
./dir1/dir1_foo_bar.jpg
./dir1/thumb.jpg
./dir2/dir2_foo_bar.jpg
./dir2/thumb.jpg
./dir3/dir3_foo_bar.jpg
./dir3/thumb.jpg
./dir4/dir4_foo_bar.jpg
./dir4/thumb.jpg
./dir5/dir5_foo_bar.jpg
./dir5/thumb.jpg

Выход

$ ./mvthumb.sh
mv ./dir1/thumb.jpg ./dir1/dir1_foo_bar_thumb.jpg
mv ./dir2/thumb.jpg ./dir2/dir2_foo_bar_thumb.jpg
mv ./dir3/thumb.jpg ./dir3/dir3_foo_bar_thumb.jpg
mv ./dir4/thumb.jpg ./dir4/dir4_foo_bar_thumb.jpg
mv ./dir5/thumb.jpg ./dir5/dir5_foo_bar_thumb.jpg
person SiegeX    schedule 16.12.2010