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