首页 > 解决方案 > 基于位置的子集 ls

问题描述

我有一个文件夹中的文件列表,需要通过管道传递给更多命令,如果我在使用时知道文件的位置,ls -v file_*.nc是否可以根据它们的位置删除/忽略文件?因此,如果ls -v file_*.nc返回 300 个文件,并且我希望从管道中删除文件 8,73 和 151,我可以执行类似ls -v file_*.nc | {remove 8,73,151} | do other stuff. 我不想删除/移动文件,我只是不希望它们通过管道传递到下一个命令。

标签: bashshell

解决方案


如果您想从输入中过滤掉您所说的:是否可以删除/忽略
您可以使用的文件grep -v <PATTERN>,这-v是一个独占匹配选项。

输入文件

ls -v1 txt* 
txt
txt-1
txt-2
txt-3
txt-4
txt-5
txt-6
txt-7
txt-8
txt-9
txt-10

然后忽略任何包含 7、8、9 的文件

ls -v txt* | grep -v '[789]'
txt
txt-1
txt-2
txt-3
txt-4
txt-5
txt-6
txt-10

删除/忽略

txt-7
txt-8
txt-9

推荐阅读