2016-04-11 30 views
-1

私はこのようなファイルしまっ:LinuxのBashの名前の変更ファイル

./abc/woinewi.mp3 
./def/mqwoifkwe.MP3 
./ghi/ioqfnw.wmv 
./xxx/powijfqiwj.WMV 
./yyy/qjwdweo.Mp3 

サブディレクトリ名がunique.Iであるが、これにbashコマンドまたはsciptsによってそれらの名前を変更したい:

./abc/abc.mp3 
./def/def.MP3 
./ghi/ghi.wmv 
./xxx/xxx.WMV 
./yyy/yyy.Mp3 

などこれは:

./abc.mp3 
./def.MP3 
./ghi.wmv 
./xxx.WMV 
./yyy.Mp3 

変換する方法はありますか?ありがとう!!!

+0

[LinuxのDIRNAMEとしてファイルの名前を変更]の可能複製(http://stackoverflow.com/questions/36539020/linux- rename-files-as-dirname) – pfnuesel

+0

あなたは既に同じ質問を以前に尋ねてきました。 https://stackoverflow.com/questions/36539020/linux-rename-files-as-dirname – pfnuesel

答えて

1

あなたがこれを使用することができます:

for f in $(find -type f) 
do 
    bn=$(basename $f) # file name 
    dn=$(dirname $f) # directory name 
    newfile=${dn}/$(basename ${dn}).${bn##*.} 
    echo mv ${f} ${newfile} 
done 

ワンライナー:出力はあなたがechoを削除期待するものである

$ for f in $(find -type f); do bn=$(basename $f); dn=$(dirname $f); echo mv $f ${dn}/$(basename ${dn}).${bn##*.}; done 

場合。

内訳:

find -type f # find all files 
dirname somefile # directory name from entry (/1/2/3 -> /1/2) 
basename somefile # filename from entry (/1/2/3 -> 3) 
${somefile##*.} # get file extension 

サンプル(cygwinの*):

[email protected] ~/test 
$ find -type f 
./abc/123.456 
./def/a.bc 

[email protected] ~/test 
$ for f in $(find -type f); do bn=$(basename $f); dn=$(dirname $f); echo mv $f ${dn}/$(basename ${dn}).${bn##*.}; done 
mv ./abc/123.456 ./abc/abc.456 
mv ./def/a.bc ./def/def.bc 
関連する問題