4

Stargate SG-1 Season 01 Episode 01「s01e01」のようなタイトルのファイルの名前を変更するにはどうすればよいですか? もちろん可変ナンバリング。私はすでに次のようなものを持っています:

for file in *.mkv; do mv "$file" "$(echo "$file" | sed -e "REGEX HERE")

必要なことを行うsedコマンドが必要です。

ありがとう

4

4 に答える 4

9

sedは必要ありません。これを試してください:

#!/bin/bash

for f in *.mkv;
do
    set -- $f
    mv "$f" s${4}e${6}
done

実際に:

$ ls
Stargate SG-1 Season 01 Episode 01.mkv

$ ./l.sh 

$ ls
s01e01.mkv
于 2013-06-16T20:58:39.033 に答える
4

GNU シード

for file in *.mkv; do mv "$file" "$(echo "$file" | sed -e 's/.*\(\S\+\)\s\+\S\+\s\(\S\+\)$/s\1e\2/')
于 2013-06-16T21:23:43.150 に答える
2

Awkはこれにも適しています

for file in *.mkv; do
   mv "$file" $(awk '{print "s", $4, "e", $6}' <<<$file).mkv
done

これはsedの問題ではないと思います:)

于 2013-06-16T21:15:38.467 に答える
0

すべての *.mkv ファイルの名前を変更するには、次のようにします。

ls *.mkv | awk '{print "mv \"" $0 "\" s" $4 "e" $6}' | sh

また

ls *.mkv | awk '{print "\"" $0 "\" s" $4 "e" $6}' | xargs mv

于 2013-06-17T23:58:17.013 に答える