linux – bash – 仅在存在相应的文本文件时打开图像

当我尝试仅根据存储在.txt文件中的信息打开图像时,我遇到了
Bash中的一个问题.我试图按大小或高度对多个图像进行排序,并按排序顺序显示图像,但如果文件夹中没有带有相同名称的.txt文件的.jpg,则不应处理它.

我已经完成了我的情况的排序部分,并且我想弄清楚我将如何仅打开带有.txt文件的.jpg扩展名的图像.

我认为一个解决方案看起来像我将每个.jpg的名称(没有扩展名)放在一个列表中,然后处理列表并运行如下:

[if -f $filename.txt];然后~~~

但我遇到了没有for循环迭代的问题,否则所有的图片都会打开多次.我的尝试是:

for i in *jpg; do
y=$y ${i.jpg}
done
if[ -f $y.txt ] then
(sorting parts)

这只是查看y中的最后一个文件名,因为它应该,但我试图找出一种方法来查看每个单独的文件名,看看是否存在该文本文件,以便将其包含在排序中.

非常感谢你的帮助!

最佳答案 在单个变量中收集文件名列表是反模式.您想要在数组中收集它们.

a=()
for f in *.jpg; do
    if [ -e "${f%.jpg}".txt ]; then
        continue
    fi
    a+=("$f")
done
# now do things with "${a[@]}"

通常,您并不需要在数组中收集文件 – 只需在遍历文件时执行for循环中所执行的所有操作.

(实际上y = $y ${i%.jpg}不附加到y – 它在尝试执行名为i sans the .jpg扩展名的文件期间将y设置为自身,这很可能会失败绝大多数情况.)

点赞