2013-08-30 69 views
0

我正在嘗試編寫一個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將我指向正確的方向:)

回答

0

你可以嘗試一個簡單的循環來做到這一點。

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進行符號鏈接。

+0

它給了我下面的錯誤,並創建一些瘋狂的符號連接...「LN:./Arrow:文件存在 LN: - :文件存在 LN:./Arrow:文件存在 LN: - :文件存在 ln:./Arrow:文件存在 ln: - :文件存在' – user2733322

+0

編輯我的答案。你需要'IFS'。 – iamauser

+0

是的,現在它工作。是否有可能使用find命令(如上所述),以便創建一個每天運行一次的cron?我認爲,通過你的解決方案,我必須在每個文件夾中單獨運行(我有很多:O) – user2733322