別のディレクトリのファイル名に基づいてディレクトリのファイル名を変更する

別のディレクトリのファイル名に基づいてディレクトリのファイル名を変更する

ここで誰かがこの質問をしたかどうかはわかりませんが、私の質問です。名前が次のファイルがあります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 *ファイルがソートされます。

ベストアンサー1

両方のディレクトリには同じ数のファイルが含まれているため、両方の配列にファイル名を保存してから、配列インデックスのリストから各インデックスの名前を変更する方法があります(両方の配列の長さが同じであるため)。

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

これは、あらゆる種類のファイル名に適用されます。
「模擬実行」の場合mvに置き換えますprintf '%s -> %s\n'

おすすめ記事