首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在bash中使用CSV从目录中删除文件

如何在bash中使用CSV从目录中删除文件
EN

Stack Overflow用户
提问于 2018-05-29 18:24:41
回答 3查看 2.3K关注 0票数 2

我在目录中有600,000+图像。文件名如下所示:

代码语言:javascript
运行
复制
1000000-0.jpeg
1000000-1.jpeg
1000000-2.jpeg
1000001-0.jpeg
1000002-0.jpeg
1000003-0.jpeg

第一个数字是唯一的ID,第二个数字是索引。

代码语言:javascript
运行
复制
{unique-id}-{index}.jpeg

如何从unique-id文件中加载.CSV文件并删除其唯一ID与.CSV文件中的唯一ID匹配的每个文件?

CSV文件如下所示:

代码语言:javascript
运行
复制
1000000
1000001
1000002

..。或者我可以用像这样的分号分隔它(如果有必要的话):

代码语言:javascript
运行
复制
1000000;1000001;1000002
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-29 18:35:29

可以将IFS变量设置为;,并循环读取到数组中的值:

代码语言:javascript
运行
复制
#! /bin/bash
while IFS=';' read -a ids ; do
    for id in "${ids[@]}" ; do
        rm $id-*.jpg
    done
done < file.csv

试着先用echo rm ...运行脚本,以验证它能做你想做的事情。

票数 1
EN

Stack Overflow用户

发布于 2018-05-29 18:31:20

如果每行只有一个ID,这将显示所有匹配的文件名:

代码语言:javascript
运行
复制
ls | grep -f unique-ids.csv

如果该列表看起来正确,则可以使用以下内容删除文件:

代码语言:javascript
运行
复制
ls | grep -f unique-ids.csv | xargs rm

警告:这是一个快速而肮脏的解决方案。如果文件名都是按您所说的方式命名的话,它就会工作。小心,它很容易被聪明的攻击者或特别不幸的用户欺骗而删除错误的东西。

票数 0
EN

Stack Overflow用户

发布于 2018-05-29 19:20:59

你可以用findsed

代码语言:javascript
运行
复制
find dir -regextype posix-egrep \
         -regex ".*($(sed 's/\;/|/g' ids.csv))-[0-9][0-9]*\.jpeg"

用搜索目录替换dir,用CVS文件替换ids.csv。若要删除文件,可以包括-delete选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50590680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档