删除所有不存在对应的其他扩展名文件的文件

删除所有不存在对应的其他扩展名文件的文件

我的目标是找到一个 Linux 命令序列,如果满足特殊条件,它会删除一些文件:

如果当前目录中没有同名但扩展名或 的文件,则应删除当前目录中所有具有扩展名.cut或的文件。.cut.bak.rec.mpg

背景:我正在为基于 Linux 的 PVR 开发一个工具,可以剪切录制的节目。对于每个记录(扩展名.rec.mpg),段标记存储在.cut具有相同名称的文件中。当某些录音被移动/重命名/删除时,相应的剪切文件将保持孤立状态并应被删除。我已经在 C 中实现了删除那些无用的剪切文件。但我想知道是否有一个(简单的)基于系统的解决方案。在这种情况下,它可以通过“系统”和在后台运行,这将使我的应用程序响应更快......

我已经针对递归情况提出了类似的问题(也浏览到子目录),这里。 kos 已经给出了一个(几乎)完美的答案 - 但不幸的是它删除了太多文件,所以它不可用,而且我无法弄清楚......但是这里可以使用相同的想法,如果它是可以逐行解析和传输 'ls' 的结果...

答案1

像这样?

for f in *.cut *.cut.bak
do
    [ -e "$f" ] || continue
    f="${f%%.bak}"
    f="${f%%.cut}"
    [ -e "$f".mpg ] || [ -e "$f".rec ] || rm -i -- "$f".cut "$f".cut.bak
done

相关内容