我在目录中有600,000+图像。文件名如下所示:
1000000-0.jpeg
1000000-1.jpeg
1000000-2.jpeg
1000001-0.jpeg
1000002-0.jpeg
1000003-0.jpeg
第一个数字是唯一的ID,第二个数字是索引。
{unique-id}-{index}.jpeg
如何从unique-id
文件中加载.CSV文件并删除其唯一ID与.CSV文件中的唯一ID匹配的每个文件?
CSV文件如下所示:
1000000
1000001
1000002
..。或者我可以用像这样的分号分隔它(如果有必要的话):
1000000;1000001;1000002
发布于 2018-05-29 18:35:29
可以将IFS变量设置为;
,并循环读取到数组中的值:
#! /bin/bash
while IFS=';' read -a ids ; do
for id in "${ids[@]}" ; do
rm $id-*.jpg
done
done < file.csv
试着先用echo rm ...
运行脚本,以验证它能做你想做的事情。
发布于 2018-05-29 18:31:20
如果每行只有一个ID,这将显示所有匹配的文件名:
ls | grep -f unique-ids.csv
如果该列表看起来正确,则可以使用以下内容删除文件:
ls | grep -f unique-ids.csv | xargs rm
警告:这是一个快速而肮脏的解决方案。如果文件名都是按您所说的方式命名的话,它就会工作。小心,它很容易被聪明的攻击者或特别不幸的用户欺骗而删除错误的东西。
发布于 2018-05-29 19:20:59
你可以用find
和sed
find dir -regextype posix-egrep \
-regex ".*($(sed 's/\;/|/g' ids.csv))-[0-9][0-9]*\.jpeg"
用搜索目录替换dir
,用CVS文件替换ids.csv
。若要删除文件,可以包括-delete
选项。
https://stackoverflow.com/questions/50590680
复制相似问题