我有一个包含文件frame*
(架构)和input_frame*
(架构)的目录,其中frame
和input_frame
是两种不同类型文件的前缀。如果仅使用前缀后面的字符并比较两个文件列表,则文件集frame*
始终是集input_frame*
的子集。
我想删除input_frame*
中frame*
中没有等效成员的文件。在bash中有一种简单的方法吗?
答案 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
例如,如果f
为input_frame97
,则${f#input_}
会展开为frame97
。只需检查修改后的文件名是否存在,如果不存在,请删除原始文件名。