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

Проблема, которую я имею, когда это переименовывает и копирует, состоит в том, что тип файла изменяется с изображения на логотип переработки (я не уверен, что это означает).

Также возможно иметь файл 'image_2101.JPG переименован в image_2101.JPG.JPG 'вместо того, чтобы просто положить. ~ 1 ~, когда его скопировали

find /root/folder/images \( -name  '*.png' -o  -name '*.jpg' -o -name '*.JPG' \) -exec cp --backup=numbered -t/root/folder/CopiedImages {} +

1 ответ1

2

cp --backup задает для файлов расширение ~ для резервного копирования, а numbered параметр заставляет его использовать ~1~ , ~2~ и т. д., поэтому для его изменения необходимо создать сценарий для изменения поведения.

Этот сценарий будет создавать копию каждого изображения в sourcefolder папке в одну папку (не будет создавать подкаталог), избегая конфликтов, добавляя номер к файлу непосредственно перед расширением. Обратите внимание, что при каждом запуске он будет дублировать каждый файл, как это делает ваш скрипт. Часть while IFS необходима для имен файлов с пробелами.

sourcefolder="/root/folder/images"
destinationfolder="/root/folder/CopiedImages"
find "${sourcefolder}" \( -name  '*.png' -o  -name '*.jpg' -o -name '*.JPG' \) -print0 | while IFS= read -r -d $'\0' img; do
    imgname="${img##*/}"
    ext="${imgname##*.}"
    noext="${imgname%.*}"
    destname="${destinationfolder}/${noext}.${ext}"
    count=0
    while [ -f "${destname}" ] ; do
        count=$((count+1))
        destname="${destinationfolder}/${noext}.${count}.${ext}"
    done
    cp "${img}" "${destname}"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .