Как удалить файлы из каталога с помощью CSV в Bash - PullRequest
0 голосов
/ 29 мая 2018

У меня более 600 000 изображений в каталоге.Имена файлов выглядят следующим образом:

1000000-0.jpeg
1000000-1.jpeg
1000000-2.jpeg
1000001-0.jpeg
1000002-0.jpeg
1000003-0.jpeg

Первое число является уникальным идентификатором, а второе число является индексом.

{unique-id}-{index}.jpeg

Как мне загрузить unique-id виз файла .CSV и удалите каждый файл, уникальный идентификатор которого совпадает с уникальным идентификатором в файле .CSV?

Файл CSV выглядит следующим образом:

1000000
1000001
1000002

... или я могуразделите их точкой с запятой, например, так (при необходимости):

1000000;1000001;1000002

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Вы можете установить переменную IFS на ; и выполнить цикл по значениям, считанным в массив:

#! /bin/bash
while IFS=';' read -a ids ; do
    for id in "${ids[@]}" ; do
        rm $id-*.jpg
    done
done < file.csv

Попробуйте сначала запустить скрипт с echo rm ..., чтобы убедиться, что он выполняет то, что вам нужно.

0 голосов
/ 29 мая 2018

Вы можете использовать find и sed:

find dir -regextype posix-egrep \
         -regex ".*($(sed 's/\;/|/g' ids.csv))-[0-9][0-9]*\.jpeg"

, заменить dir на каталог поиска и ids.csv на файл CVS.Для удаления файлов вы можете включить опцию -delete.

0 голосов
/ 29 мая 2018

Если в строке ровно один идентификатор, все соответствующие имена файлов будут показаны:

ls | grep -f unique-ids.csv

Если этот список выглядит правильно, вы можете удалить файлы с помощью:

ls | grep -f unique-ids.csv | xargs rm

Предостережение: это быстрое и грязное решение.Это будет работать, если имена файлов будут называться так, как вы говорите.Осторожно, что хитрый злоумышленник или особенно несчастный пользователь может легко обмануть удачу.

...