Shell 使用symlink更改字幕的扩展格式
我正在尝试编写一个shell命令(Linux),它将查找以NAME.el.srt结尾的所有字幕,并以NAME.srt格式对它们进行符号链接(从中删除.el) 使用:Shell 使用symlink更改字幕的扩展格式,shell,find,symlink,Shell,Find,Symlink,我正在尝试编写一个shell命令(Linux),它将查找以NAME.el.srt结尾的所有字幕,并以NAME.srt格式对它们进行符号链接(从中删除.el) 使用: /usr/bin/find/volume1/public/test-follow-type f\(-iname“*.el.srt”) 给出了以下结果: /volume1/public/test/Arrow-S01E04.el.srt /volume1/public/test/Arrow-S01E01.el.srt /volume1/
/usr/bin/find/volume1/public/test-follow-type f\(-iname“*.el.srt”)
给出了以下结果:
/volume1/public/test/Arrow-S01E04.el.srt
/volume1/public/test/Arrow-S01E01.el.srt
/volume1/public/test/Arrow-S01E02.el.srt
/volume1/public/test/Arrow-S01E03.el.srt
我不想重命名它们。我只想在与原件相同的文件夹中创建一个符号链接
我以为那会是一个很容易的机会。。。但4小时后,我只是在寻找更有经验的人来帮助我:)
最后我找到了:
IFS=$(echo -en "\n\b");
for j in $(find /volume1/video -follow -type d -name "*");
do
cd $j;
for i in $(find $j -name "*.el.srt" -maxdepth 1 -exec basename {} \;);
do
rname=$(echo "$i" | sed -e 's/\.el\.srt/\.srt/g');
ln -s "$i" "$rname";
done
done
感谢iamuser为我指出了正确的方向:)您可以尝试一个简单的for循环来实现这一点
IFS=$(echo -en "\n\b");
for i in $(find . -name "*.el.srt");
do
rname=$(echo "$i" | sed -e 's/\.el\.srt/\.srt/g');
ln -s "$i" "$rname";
done
它循环遍历当前目录中以
.el.srt
结尾的所有文件。对于每个文件,它都会创建一个临时变量rname
,该变量的扩展名为.srt
,没有.el
部分。然后它用ln-s
做了一个符号链接,它给出了以下错误并创建了一些疯狂的符号链接ln:。/箭头:文件存在ln:-:文件存在ln:。/箭头:文件存在ln::文件存在ln:。/箭头:文件存在ln:-:文件存在'编辑我的答案。您需要IFS
。是的,现在它可以工作了。是否可以将它与find命令一起使用(正如我上面提到的),以便创建一个每天运行一次的cron?我认为对于您的解决方案,我必须在每个文件夹中分别运行(我有许多:O),我认为您可以通过将点
替换为/Volume1/public/test
来运行相同的脚本。它应该也可以工作。好吧,它可以工作,但是符号链接不是像“Arrow1.srt->Arrow1.el.srt”,而是像“Arrow1.srt->volume1/public/test/Arrow1.el.srt”,玩家找不到它。如果符号链接只是使用名称而不是路径,那么它就可以正常工作了!