5

У меня есть куча файлов изображений из сканов / факсов с неправильным названием, которые мне нужно исправить для наших пользователей Linux. Оказывается, у нас есть несколько сканов в формате PNG, помеченных как * .jpg наоборот. В Windows это никогда не было проблемой, так как Explorer / Office просто игнорировал расширение. Но в Linux Eye of GNOME и т.д. В итоге просто отказываются открывать файл, потому что содержимое не соответствует расширению.

У кого-нибудь есть какие-либо рекомендации для инструмента или небольшого кусочка сценария, который мог бы сделать это? Я мог бы написать программу на C, чтобы сделать это, но это кажется немного излишним. Просто сидеть и вручную переименовывать вручную не вариант, есть тысячи.

Редактировать: я вижу, что команда file посмотрит фактическое содержимое файла и покажет, что это такое. Я не совсем уверен, как использовать информацию из него, хотя.

2 ответа2

9

Вы захотите перебрать файлы, которые выглядят как файлы изображений, вызвать file чтобы увидеть, что они на самом деле, а затем переименовать их соответствующим образом

for f in *.{jpg,JPG,png,PNG,jpeg,JPEG}; do 
    type=$( file "$f" | grep -oP '\w+(?= image data)' )
    case $type in  
        PNG)  newext=png ;; 
        JPEG) newext=jpg ;; 
        *)    echo "??? what is this: $f"; continue ;; 
    esac
    ext=${f##*.}   # remove everything up to and including the last dot
    if [[ $ext != $newext ]]; then
        # remove "echo" if you're satisfied it's working
        echo mv "$f" "${f%.*}.$newext"
    fi
done
-3

ls | grep "png" | awk 'BEGIN{FS="\."}{print $1".png " $1".jpg"}'|xargs mv

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

Это, вероятно, не решение, которое будет работать в вашем конкретном случае сразу, но есть все, что вам нужно. Если вы дадите мне более подробную информацию или, что еще лучше, распечатку списка всех файлов, которые вам необходимо изменить, я мог бы изменить команду, чтобы она вам точно подходила.

РЕДАКТИРОВАТЬ # 1: я не понимал, что ему нужно изучить содержимое файла, чтобы узнать, что не так, я думал, что он знал список файлов с неправильным именем

РЕДАКТИРОВАТЬ # 2: Комментаторы, кажется, зациклены на части кода до awk. Я думал, что я был достаточно ясен с моим первым предложением, но так как я не был; Вы должны будете предоставить код перед awk, который будет соответствующим образом перечислять ваши файлы. Кроме того, это было задумано как основной пример того, как вы можете начать выполнять такую задачу самостоятельно. Я признал, что копирование и вставка почти наверняка не сработают.

Вы узнаете больше, выполнив и самостоятельно приняв решение, а не слепо применяя линии из Интернета. Если вы все еще застряли с этой точки зрения, не стесняйтесь комментировать, и я могу попытаться помочь.

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