2017-03-05 3 views
0

各フォルダには.mkvまたは.aviというファイルがあります。接尾辞の付いたファイルの名前をフォルダの名前に変更します。

例えば:

Sommerferien201308/Sommerferien201308.avi 
Sommerferien201309/Sommerferien201309.mkv 
Herbst201401/Herbst201401.avi 
Herbst201402/Herbst201402.mkv 

は、どのように私はそのフォルダの名前にファイル名の名前を変更することができます

Sommerferien201308/eins.avi 
Sommerferien201309/eins.mkv 
Herbst201401/film.avi 
Herbst201402/krz.mkv 

に名前を変更しますか? もちろん、すべてのフォルダ名は一意です。また、ファイル/フォルダごとに手動で行うのはあまりにも多くなります。

私は見つけようとします。

find . -type d -name "" -exec cd "" && mv {} \; 

しかし、私は、フォルダ名を選択して、どのようにaviファイルやmkvの選択を行うために、どのように選択したフォルダ名を保存する方法を知らない...

+0

1つのフォルダには、** Sommerferien2013 **とVideofile ** eins.mkv ** という名前が付けられています。それらは多くあり、.mkvや.aviなどがあります。 私は 'find'コマンドで始めるでしょうか? 出力は** Sommerferien2013 \ Sommerferien2013.mkv ** – arphex

+1

となります。あなたが他の誰かであり、あなたがこの質問に遭遇したとします。あなたは、すべての必要な情報が良い答えを与えるために利用可能であると言うでしょうか? – Biffen

+0

説明ありがとうございましたもっと正確にしようとしました。質問がより理解できない場合は、フィードバックをお願いします。 – arphex

答えて

1

あなたはベースからこのfindコマンドを使用することができます*.avi*.mkvファイルが含まれているあなたのフォルダのフォルダ:

while IFS= read -rd '' f; do 
(
    IFS=/ 
    arr=($f) 
    if [[ $f != *"/${arr[len-2]}"* ]]; then 
     len=${#arr[@]} 
     ext="${arr[len-1]##*.}" 
     cd "$(dirname "$f")" && echo mv "${arr[len-1]}" "${arr[len-2]}.$ext" 
    fi 
) 
done < <(find . \(-name '*.mkv' -o -name '*.avi' \) -print0) 

あなたは出力に満足しているmvechoを削除します。

+0

ありがとうございます。それの使い方?他のすべてのフォルダを含むフォルダに.shファイルを作成しますか? .shファイルに貼り付けますか?私はそれを試み、 '$ sh rename.sh'を実行しました。 出力が来ました 'rename.sh:行9:予期しないトークンの近くで構文エラー '<' rename.sh:9行目:' done << * .avi '\)-print0)' ' – arphex

+1

素晴らしい!それは私がそれを実行するときに私に出力を与える。 findコマンドの '-o'スイッチは何ですか?もし私が.mp4で拡張するつもりなら?私はOSのマンページで '-o'を見つけられません。編集:私はそれを見つけた。 OR式。 :) – arphex

+0

私は 'echo'を削除しました。このエラーが出ました。' mv: 'sommer.mkv 'を統計できません:そのようなファイルやディレクトリはありません。 – arphex

関連する問題