Как поймать файлы с одинаковыми именами, но разными расширениями в Linux и удалить их - PullRequest
0 голосов
/ 22 октября 2018

ОС - Ubuntu 16.04

Моя цель проста.В папке несколько изображений, скажем

A.jpg
A.jpeg
B.jpg
B.jpeg
C.jpg

Мне нужны имена файлов jpg с копией .jpeg.Поэтому в этом случае мне нужны имена A.jpg и B.jpg.Обратите внимание, что я не хочу C.jpg, потому что у него нет копии в формате JPEG.

Далее я хочу удалить файлы .jpg, имена которых у меня есть.Поэтому в этом случае я хочу удалить ТОЛЬКО A.jpg и B.jpg.

Есть ли набор команд для этого?(Я сделал отступ в именах файлов, потому что по какой-то причине stackoverflow говорил мне, что это код.)

EDIT

Можно ли как-нибудь поместить эти имена файлов в текстовый файла затем читать с него, чтобы удалить необходимые файлы?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Вы можете попробовать:

for file in *.jpeg; do echo ${file%.*}.jpg; done

Если это то, что вы хотите, просто замените 'echo' на 'rm'

(отредактировано). Таким образом, вы не увидите ошибок длянесуществующие файлы:

for file in *.jpeg; do [[ -f ${file%.*}.jpg ]] && rm ${file%.*}.jpg; done
0 голосов
/ 22 октября 2018

Это может быть:

#!/bin/sh

JPG_LIST="*.jpg"
#JPG_LIST=$(cat JPG_filenames_to_test.txt)

for filename in $JPG_LIST; do
    BASENAME="${filename%.*}"
    echo -n "Basename '$BASENAME': "
    if [ -e $BASENAME.jpg -a -e $BASENAME.jpeg ] ; then
        echo "$BASENAME.jpeg found. Removing $BASENAME.jpg"
        rm $BASENAME.jpg
    else
        echo "No $BASENAME.jpeg file found. Keeping original $BASENAME.jpg"
    fi
done
...