0

背景故事:

我的音乐收藏中有 MP3 和 FLAC 文件。我在音乐/mp3 和音乐/flac 中组织了 MP3。虽然我更喜欢听 FLAC 文件,但我的大部分音乐都是 MP3。music/mp3 中的几首歌曲与 music/flac 中的歌曲相同。

当我的桌面音乐播放器创建音乐目录库时,这些歌曲会被复制。我想将我的 /music/mp3 独有的 MP3 链接到他们自己的目录,以便我的音乐播放器可以扫描它和 /music/flac。这样,我拥有 FLAC 编码和独特 MP3 的所有歌曲都将被播放。

问题:

我确定了哪些歌曲是音乐/mp3 独有的,并且我有一个由换行符分隔的绝对路径名文件。如何让 ln 命令循环遍历每一行(创建一个链接来表示 music/mp3_unique)?

4

2 回答 2

0

我不认为ln有能力从文件创建链接,但由于你使用的是 bash,你可以这样做:

for i in `cat file`;do ln -s $i;done

file具有绝对路径的文件的名称在哪里

于 2012-02-26T20:31:53.807 回答
0

如果所有文件都在同一个文件系统上,则可以使用硬链接而不是软链接。这样做的好处是您不再需要使用绝对路径名。在那种情况下,我会很想做这样的事情:

所以......假设你有一个看起来像这样的文件树:

/音乐 /音乐/mp3 /音乐/flac

在 music 下创建一个“scanme”目录,并创建指向您要播放的所有音乐的硬链接:

mkdir /music/scanme
cd /music/scanme
( cat ../mp3/unique.txt; find ../flac ) | while read file
do
    ln "$file" $(basename "$file")
done

当文件名包含空格时,这将起作用,而直接 for 循环不会。

于 2012-02-26T21:08:52.673 回答