рекурсивное переименование файлов путем добавления строки в начало файла в Linux

рекурсивное переименование файлов путем добавления строки в начало файла в Linux

Я перепробовал много команд. Никто не справился с задачей. Как использовать rename / find или что-то еще, чтобы добавить строку в начало файлов в подпапках, рекурсивно?

примерfile.jpg --> image_file.jpg

find . -name '*.jpg'  -exec  rename  -n "s/^/image_/" *.jpg {} +
for pic in '*.jpg' ; do  rename  -n "s/^/image_/ ${pic}"; done
find . -name '*.jpg'  -exec rename -n "s/^/image_/ .jpg '{}' \;
find "/files/" -type f -exec rename 's/^/image_/' '{}' \;
find . -name '*.jpg' -type f -exec bash -c 'echo "$1" "${1/^/image_/}"' -- {} \;

почему это говоритInvalid cross-device link find . -name '*.jpg' -execdir rename 's:./:/image_:' {} +

решение1

Я нашел это! Эта команда добавляет строку в начало каждого файла рекурсивно во всех подкаталогах. Я пока не знаю, почему это работает, но работает. Уберите '-n' для получения реальных результатов.

find . -name '*.jpg' -execdir rename -n 's:./:./image_:' {} +

пример результата:rename(./28652316400.jpg, ./image_28652316400.jpg)

  • sозначает замену.

  • :как я понял, это означает перейти к первому вхождению "." затем, пока вы идете к ".", затем заменить на "image_" и выйти. (хотя я могу ошибаться). Читатьздесьподробнее о значении двоеточия в bash и скриптах.

Связанный контент