2011-08-31 7 views
7

フォルダ内のすべてのファイルの名前を変更し、.xml拡張子を追加したいとします。私はUnixを使用しています。どうやってやるの? PythonのUnix/Linuxのフォルダ内のすべてのファイルに拡張子.xmlを追加する方法

+1

これらのタグは混乱を招きます。 PHP、Python、またはUnixシェルでこれを行いますか? – rds

+0

リネームの/ $/\。xml/'*リファレンス:http://askubuntu.com/a/74368 – Neil

答えて

18

、あなたがこれを行うことができます:

for file in *; do 
    if [ -f ${file} ]; then 
     mv ${file} ${file}.xml 
    fi 
done 

編集

すべてのサブディレクトリに再帰的にこれを行うには、あなたはfind使用する必要があります。他に

for file in $(find -type f); do 
    mv ${file} ${file}.xml 
done 

をもしこれよりも複雑なことをするなら、おそらくshellスクリプトを使うべきではありません。

まだよく

以下Jonathan Lefflerが提供するコメント使用します(これは標準であれば知っているが、私のPerlパッケージ(Debianの/ Ubuntuは)/usr/bin/prenameが含まれてはいけない

find . -type f -exec mv {} {}.xml ';' 
+0

どのようにすべてのサブディレクトリで再帰的に行うのですか? – aWebDeveloper

+5

ファイルを見つけるために 'find'を使います。 'find。 -type f -exec mv {} {} .xml ';' ' –

+1

答えを更新しました。 –

2

使用os.listdirディレクトリ内のすべてのファイルの名前を見つけます。 を再帰的ににする必要がある場合は、サブディレクトリ内のすべてのファイルも検索してください。代わりにos.walkを使用してください。そのAPIはos.listdirより複雑ですが、ディレクトリを再帰的に歩く強力な方法を提供します。

次に、os.renameを使用してファイルの名前を変更します。シェル上

+0

サンプルコードまたはサンプルまたはリンク。私はPythonを知らない – aWebDeveloper

+0

@Web開発者:答えを提供してくれたのは-1ですか?真剣に? –

+0

いいえ、私は間違ってクリックしました。すぐに元に戻しました。 – aWebDeveloper

3

をし、シンボリックリンクrename)は他にはありません:

rename 's/$/.xml/' * 
+0

どのように再帰的にすべてのサブディレクトリで行うのですか.xmlファイルではありません。すなわち、まだ名前が変更されていないファイル – aWebDeveloper

+0

'*'の代わりに '$(find -type f)'を使用します。そして正規表現を '/(?<!\。xml)$ /。xml /' – mario

+2

と適合させることができます。-renameを-nフラグとともに使用すると、実際にファイルの名前を変更せずに名前の変更方法をテストできます。 –

3
find . -type f \! -name '*.xml' -print0 | xargs -0 rename 's/$/.xml/' 
関連する問題