Linux, как удалить файлы в одной папке, где префиксы не совпадают с другой папкой? - PullRequest
0 голосов
/ 31 января 2019

Я хочу удалить дополнительные файлы в одной папке, где имена файлов префиксов не совпадают с именами в другой.Простой пример покажет:

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 префиксы не существуют в folderB.

Как я могу сделать это автоматически в 1 операторе командной строки?Предположим, что формат frameXXXX будет одинаковым для всех файлов между ними.

Cheers

1 Ответ

0 голосов
/ 01 февраля 2019

Вы можете использовать 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 не совпадает со вторым найти, чем удалить файл.

...