Linux

根據另一個目錄上的文件名重命名目錄中的文件

  • November 22, 2015

我不確定這裡是否有人問過這個問題,但這是我的問題。我有文件可以說dir1命名:

File 1.mp4
File 2.mp4
etc..

現在在目錄上dir2,我有名為:

Sub 1.srt
Sub 2.srt
etc..

我怎麼能重命名Sub 1.srt所以它變成File 1.srt. 所以基本上將所有*.srt文件重命名為*.mp4文件名。兩個目錄上的文件數量相同,並且使用printf %s\\n *的文件是排序的。

由於兩個目錄包含相同數量的文件,這裡有一種方法將文件名保存在兩個數組中,然後對數組索引列表中的每個索引進行重命名(因為兩個數組具有相同的長度):

mp4paths=(dir1/*.mp4)              # save mp4 file names in array
mp4names=("${mp4paths[@]##*/}")    # remove leading path components
name=("${mp4names[@]%.*}")         # remove extension
srt=(dir2/*.srt)                   # save srt file names in array
for i in "${!srt[@]}"              # for each index in the list of array indices 
do                                 # do stuff here...
mv "${srt[$i]}" dir2/"${name[$i]}".srt
done

這應該適用於所有類型的文件名。

對於“試執行”替換mvprintf '%s -> %s\n'.

引用自:https://unix.stackexchange.com/questions/244634