Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何从文件中的文件路径创建链接?_Linux_Bash_Shell_Loops_Ln - Fatal编程技术网

Linux 如何从文件中的文件路径创建链接?

Linux 如何从文件中的文件路径创建链接?,linux,bash,shell,loops,ln,Linux,Bash,Shell,Loops,Ln,背景故事: 我的音乐收藏中有MP3和FLAC文件。我在music/mp3下组织了mp3,在music/flac中组织了FLACs。虽然我更喜欢听FLAC文件,但我的大部分音乐都是MP3。music/mp3中的一些歌曲与music/flac中的歌曲相同 当我的桌面音乐播放器创建音乐目录库时,这些歌曲将被复制。我想将/music/mp3独有的mp3链接到它们自己的目录,以便我的音乐播放器可以扫描它和/music/flac。这样,我所有的歌曲,我有一个FLAC编码的,独特的MP3,将被播放 问题: 我

背景故事:

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

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

问题:


我确定了哪些歌曲是music/mp3所独有的,并且我有一个由新行分隔的绝对路径名文件。如何让ln命令在每一行中循环(创建一个链接,比如说,music/mp3\u unique)?

我认为
ln
无法从文件中创建链接,但由于您使用的是bash,您可以这样做:

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

其中,
file
是具有绝对路径的文件名

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

所以。。。假设您有一个类似以下内容的文件树:

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

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

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

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

我有一个“duh!”有一次我看到了你优雅而简单的解决方案。我缺少的一点是对文件进行cat以创建流。谢谢哦,是的,ln的第二个参数应该是要链接到的目标目录。