在bash中比较两个文件列表的最简单方法?

时间:2014-08-18 19:25:25

标签: bash

我有一个包含文件frame*(架构)和input_frame*(架构)的目录,其中frameinput_frame是两种不同类型文件的前缀。如果仅使用前缀后面的字符并比较两个文件列表,则文件集frame*始终是集input_frame*的子集。

我想删除input_frame*frame*中没有等效成员的文件。在bash中有一种简单的方法吗?

3 个答案:

答案 0 :(得分:2)

您可以使用:

for f in input_frame*; do [[ ! -f "${f#input_}" ]] && echo rm "$f"; done

如果您对输出感到满意,请移除echo

答案 1 :(得分:0)

这样的事情(首先使用echo代替rm进行测试):

for i in input_frame*;
    if [ ! -e ${i/input_/} ]; then
        rm $i
    fi
done

答案 2 :(得分:0)

由于frame本身是input_frame的后缀,因此您只需使用#参数扩展运算符即可完成此操作。

for f in input_frame*; do
    [[ -f "${f#input_}" ]] || rm "$f"
done

例如,如果finput_frame97,则${f#input_}会展开为frame97。只需检查修改后的文件名是否存在,如果不存在,请删除原始文件名。