我的目标是找到一个 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