如何在Linux中捕获名称相同但扩展名不同的文件并将其删除

时间:2018-10-22 14:08:26

标签: linux ubuntu terminal ubuntu-16.04

OS-Ubuntu 16.04

我的目标很简单。文件夹中有多张图片说

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

我想要具有.jpeg副本的jpg文件的名称。因此,在这种情况下,我想要名称A.jpg和B.jpg。请注意,我不需要C.jpg,因为它没有jpeg副本。

接下来,我要删除我具有其名称的.jpg文件。因此,在这种情况下,我只想删除A.jpg和B.jpg。

有一组命令可以做到吗? (我缩进了文件名,因为出于某种原因stackoverflow告诉我它是代码。)

编辑

有办法将这些文件名放在txt文件中,然后从中读取以删除所需的文件吗?

2 个答案:

答案 0 :(得分:3)

您可以尝试:

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

如果这是您想要的,只需将'echo'替换为'rm'

(已编辑),这样您就不会看到不存在文件的错误:

for file in *.jpeg; do [[ -f ${file%.*}.jpg ]] && rm ${file%.*}.jpg; done

答案 1 :(得分:1)

这可能是:

#!/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