我需要一个Bash脚本,它将为文件夹X(及其子文件夹)中的每个*.mp3
文件创建一个符号链接,并将这些符号链接存储在文件夹Y中,不包含子文件夹,可能会跳过重复项。
好奇的是,这是使用Libretime自动化广播电台。
抱歉,如果这是一个愚蠢的问题,我从未使用过Bash脚本。
答案 0 :(得分:1)
与评论一样:使用find
创建mp3文件列表:
find /top/dir/for/mp3s -name '*mp3'
您将希望使用该输出循环它,所以:
find /top/dir/for/mp3s -name '*mp3' | while read mp3file, do
# do the linking
done
您希望在特定目录中创建一个链接,可能具有相同的文件名。您可以使用basename
获取文件名。所以,这将使它像这样:
find /top/dir/for/mp3s -name '*mp3' | while read mp3file; do
filename=$(basename $mp3file)
ln -s $mp3file /dir/where/the/links/are/$filename
echo Linked $mp3file to /dir/where/the/links/are/$filename
done
但是,这可能会给你两种类型的错误:
basename
将无法生成正确的文件名,ln
会抱怨。解决方案:使用正确的引用。ln
会抱怨该链接已存在。解决方案:测试链接是否存在。因为你没有摧毁任何东西,你可以尝试并实际看到问题。所以,我们的下一次迭代将是:
find /top/dir/for/mp3s -name '*mp3' | while read mp3file; do
filename=$(basename "$mp3file")
if [ ! -l "/dir/where/the/links/are/$filename" ] ; then
ln -s "$mp3file" "/dir/where/the/links/are/$filename"
echo "Linked $mp3file to /dir/where/the/links/are/$filename"
else
echo "Not linked $mp3file; link exists"
fi
done
那会给你一个相当不错的结果。它也为您提供了一个很好的起点。