如何使用文件列表从搜索中排除文件

时间:2016-11-20 12:49:39

标签: bash

我正在使用迭代bash脚本构建“m3u”播放列表。一旦m3u文件中包含了其中列出的曲目,如何在附加时使用该文件作为过滤器来排除现有曲目?

您可能已经知道,m3u播放列表只是一个文件指针列表。

例如,让我们说你有" myplaylist.m3u"用这些歌曲:

/path/a_fine_frenzy/bomb_in_a_birdcage/06_-_a_fine_frenzy_-_swan_song.mp3
/path/a_fine_frenzy/one_cell_in_the_sea/06_-_a_fine_frenzy_-_almost_lover.mp3
/path/a_fine_frenzy/bomb_in_a_birdcage/07_-_a_fine_frenzy_-_elements.mp3
/path/a_fine_frenzy/one_cell_in_the_sea/07_-_a_fine_frenzy_-_think_of_you.mp3

您现在想继续追加" myplaylist.m3u"使用可能包含上述歌曲的其他搜索,但您不希望再次添加它们。那么如何排除未来搜索中列出的文件?

您的搜索通常可能是:

find /home/username/Music/ -type f -iname "*.mp3" >> myplaylist.m3u

1 个答案:

答案 0 :(得分:1)

使用find

在追加之前过滤grep的结果
find /home/username/Music/ -type f -iname "*.mp3" | grep -vxf myplaylist.m3u >> myplaylist.m3u

标志说明:

  • -f file使用file
  • 中的模式
  • -x匹配整行
  • -v反转逻辑:打印不匹配的行,而不是匹配
  • 的行

因此,grep只会输出尚未包含在文件中的find行。