我想删除一个文件夹中前缀文件名与另一个不匹配的多余文件。一个简单的示例将显示:
public List<Document> getDocID()
{
using (IDbConnection connection = new SqlConnection(helper.CnnVal("WorkflowConfiguration")))
{
var output4 = connection.Query<Document>($"Select DocID From [Workflow Creation].[dbo].[CustomerDoc] ORDER BY DocID DESC").ToList();
return output4;
}
}
我要从folderA
- frame0001.jpg
- frame0002.jpg
- frame0003.jpg
- frame0004.jpg
- frame0005.jpg
- frame0006.jpg
- frame0007.jpg
folderB
- frame0001_test.jpg
- frame0003_test.jpg
- frame0004_test.jpg
- frame0005_test.jpg
- frame0007_test.jpg
中删除folderA
和frame0002.jpg
,因为frame0006.jpg
中不存在那些frameXXXX
前缀。
如何在1个命令行语句中自动执行此操作?假设两者之间的所有文件的folderB
格式都相同。
欢呼
答案 0 :(得分:1)
您可以将find
与-exec
选项一起使用。
基本格式为find . -exec sh -c 'echo {} | grep frame' \;
。
在find
中用folderA
搜索,如果条件匹配(或不匹配),则执行rm
。有用的命令是:sed
,grep
和&& rm {}
,|| rm {}
。
编辑:
find folderA -type f -exec sh -c 'find folderB -type f | grep $(echo {} | grep -Po "frame[0-9]{4}") > /dev/null || echo rm {}' \;
如果您喜欢输出,请删除最后一个echo
以调用删除操作。
编辑:修复和/或,如果grep与第二个查找不匹配,则删除文件。