Shell 使用symlink更改字幕的扩展格式

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/

我正在尝试编写一个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/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”,玩家找不到它。如果符号链接只是使用名称而不是路径,那么它就可以正常工作了!