Linux如何删除前缀与另一个文件夹不匹配的一个文件夹中的文件?

时间:2019-01-31 19:45:05

标签: linux file ubuntu command directory

我想删除一个文件夹中前缀文件名与另一个不匹配的多余文件。一个简单的示例将显示:

    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 中删除folderAframe0002.jpg,因为frame0006.jpg中不存在那些frameXXXX前缀。

如何在1个命令行语句中自动执行此操作?假设两者之间的所有文件的folderB格式都相同。

欢呼

1 个答案:

答案 0 :(得分:1)

您可以将find-exec选项一起使用。

基本格式为find . -exec sh -c 'echo {} | grep frame' \;

find中用folderA搜索,如果条件匹配(或不匹配),则执行rm。有用的命令是:sedgrep&& 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与第二个查找不匹配,则删除文件。