
Я перепробовал много команд. Никто не справился с задачей. Как использовать 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 и скриптах.