如何删除匹配特定字符位置的文件?

How to delete files matching specific character placement?

我正在尝试删除其名称在特定位置包含特定数字的文件。使用 bash 和包含这些特定数字的文本文件。

我有一个包含以下命名约定的文件的目录:2019-08-06-11-35-13_2091232924_4569.mp3

我有一个文本文件,其中包含我想要匹配和删除的区号。其中一个区号是 209。从文件名右侧读取始终是一致的。所以我想将右边的字符 17、18、19 与文本文件进行匹配,然后使用 bash 删除这些文件。我试过简单的通配符匹配,但它会删除其他位置有这些数字的文件。

您可以使用 ? 通配符,它​​匹配任何单个字符。

rm ????-??-??-??-??-??_209???????_????.mp3

不过,似乎所有的通配符都是数字,所以你可以用[0-9]代替?,这样更安全。

rm [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]_209[0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9].mp3

如果您从文件中获取区号,则可以将模式中的 209 替换为您从文件中指定的变量。

rm ????-??-??-??-??-??_"$code"??????_????.mp3

你或许可以用 xargs 做点什么:

xargs -n1 <input.txt sh -c 'rm *_*_*.mp3' {}