gpt4 book ai didi

bash - 按扩展名删除孤立的 sidecar 文件

转载 作者:行者123 更新时间:2023-11-29 09:12:40 25 4
gpt4 key购买 nike

在文件夹中我可能有以下类型的文件名:

filename.imageExtension
filename.imageExtension.sidecarExtension
filename.sidecarExtension

扩展如下:

imageExtension 可以是一些扩展名,如:.nef.raf.orf

sidecarExtension 可以是一些扩展名,例如:.xmp.pts.pp3

所以在一个文件夹中,例如,我可以有这样的文件:

tree.nef
tree.nef.pp3

car.raf
car.xmp
car.raf.pp3

house.xmp
something.nef.pp3

在这种情况下,house.xmpsomething.nef.pp3应该删除的孤立文件。 确定这些文件是孤立的,是因为没有相应的图像文件(具有相同名称但具有 imageExtension 且没有 sidecarExtension 的文件)。

有没有办法删除所有孤立文件,并且只删除带有 bash 脚本的孤立文件?

我一直在尝试使用嵌套的 for 循环和 if 语句来做到这一点:

if [[ -e $(echo "$filename" | sed "s/"$imageExtension"/"$sidecarExtension"/g" ) ]]

if [[ -e $(echo "$filename" | sed "s/"$imageExtension""$sidecarExtension"/"$sidecarExtension"/g" ) ]]

但我从未得到我需要的结果。

最佳答案

这是一种可能的解决方案:

shopt -s nullglob extglob;

# Get all sidecar files
for file in *.{xmp,pts,pp3}
do
# Generate all permutations of filenames that it may belong to,
# and let globbing delete the ones that don't exist
candidates=("${file%.*}"@() "${file%.*}".{nef,raf,orf}@());

# If none exist, the file can be deleted
[[ ${#candidates[@]} -eq 0 ]] && echo rm "$file"
done

它依赖于这样一个事实,即对于 nullglob 和 extglob,如果文件存在,"file"@() 将扩展为 file,否则不扩展为空。

如果不明显,必须删除 echo 才能真正执行删除。否则,它会试运行并仅说明它会删除哪些文件。

关于bash - 按扩展名删除孤立的 sidecar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48757748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com