【问题标题】:Linux how to remove files in one folder where prefixes don't match another folder?Linux如何删除一个文件夹中前缀与另一个文件夹不匹配的文件?
【发布时间】:2019-06-25 08:40:34
【问题描述】:

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

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.jpgframe0006.jpg,因为folderB 中不存在frameXXXX 前缀。

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

干杯

【问题讨论】:

    标签: linux file ubuntu command directory


    【解决方案1】:

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

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

    folderA 中搜索find,如果您的条件匹配(或不匹配),则执行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 与第二次查找不匹配,则删除文件。

    【讨论】:

    • 真棒会尝试!
    • 我没有将任何输出打印到终端(在对测试进行了小的修改之后)。有什么想法吗?
    猜你喜欢
    • 2014-02-15
    • 2013-12-08
    • 1970-01-01
    • 2019-07-25
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    相关资源
    最近更新 更多