2017-06-30 8 views
-1

は私が私のディレクトリを持つファイル。任意のフォルダ内のサブフォルダは固定されていないため、操作は再帰的に行う必要があります。はすべての.jpgに親フォルダ名を追加します(ケースは鈍感)

すべての.jpgファイルを見つけて、それらの親フォルダ名を追加することです。それは今のようになります

Parent 
    Sub folder 1 
     Sub folder 1xyz_Room.jpg   
     Sub folder 1xyz_facade.jpg 
     Sub folder 1abc_Room.jpg 
    Sub folder 2 
     Sub folder 2xyz_Room.jpg   
     Sub folder 2xyz_facade.jpg 
     Sub folder 2abc_Room.jpg 
    Sub Folder 3 
     Sub Folder 3yolo_Room.jpg 
     Sub sub folder 1 
      Sub sub folder 1xyz_Room.jpg   
      Sub sub folder 1xyz_facade.jpg 
      Sub sub folder 1abc_Room.jpg 

誰かが私にこれを行う方法を教えてくださいできますか?これは、端末を使用しているubuntu16.04 GPUマシンで行われます。

+3

良い。何を試しましたか? – void

+3

あなたはこれまでに何を試しましたか? – Cleared

+0

あなたはpythonやbashのヒントが必要ですか? – PRMoureu

答えて

1

この

xargs mkdir < Sub folder 1 
+0

mkdir:オペランドがありませんか? ここに何か不足していますか? –

+0

@KaustubhMundraあなたのサブフォルダの名前を入れてください。 – MishaVacic

+0

はい、確かに分かりますが、それはこの方法ではうまくいきません。 –

0

使用が必要なすべてのファイルを一覧表示するコマンドを見つけてください。そして、Pythonにループ

for file_name in `find . -name '*jpg' -type f`; 
do 
dir_name=`dirname ${file_name}`; 
base_dir_name=`echo ${dir_name} | rev | cut -d '/' -f 1`; 
base_name=`basename ${file_name}`; 
mv ${file_name} ${dir_name}/${base_dir_name}${base_name} 
done 
+0

私は再帰的に行く必要がありますか?このコードは私が想定していることではありませんか? –

+0

2つ以上のレベルのディレクトリ(親/サブフォルダ)がありますか?もしそうなら、ファイルを含むディレクトリだけを追加したいのですか? – shanmuga

+0

@KaustubhMundraこれは役に立ちますか? – shanmuga

1

オーケー、私は解決策を与えるつもりのために使用して、すべてのファイルを反復処理。ディレクトリParent.pyのスクリプトと同じディレクトリにあるとします。下のもの!

とディレクトリ構造は、これと同じで、

rename_script.py 
Parent 
    Sub folder 1 
     xyz_Room.jpg   
     xyz_facade.jpg 
     abc_Room.jpg 
    Sub folder 2 
     xyz_Room.jpg   
     xyz_facade.jpg 
     abc_Room.jpg 
    Sub Folder 3 
     yolo_Room.jpg 
     Sub sub folder 1 
      xyz_Room.jpg   
      xyz_facade.jpg 
      abc_Room.jpg 

このコードは動作するはずです。 (Linuxの場合)

rename_script.py:

import os 

for folder in os.listdir("./Parent"): 
    s=os.listdir("./Parent/"+folder) 
    for file in s: 
     os.rename("./Parent/"+folder+"/"+file,"./Parent/"+folder+"/"+folder+file) 

さて、

os.listdir("./Parent") 

これはlistとして、親内のすべてのサブフォルダの一覧を表示します。だから、これらの各ファイルは、名前を変更するために最後に各フォルダ

s=os.listdir("./Parent/"+folder) 

上記のためにそれらのサブフォルダからのファイルになるだろうし、リストに保存し、1 subfolderため、このの出力は次のようになり、

['xyz_Room.jpg', 'abc_Room.jpg', 'xyz_facade.jpg'] 

os.rename(src,dest)を使用してください。これは、同じことを

NOTE

os.rename("./Parent/"+folder+"/"+file,"./Parent/"+folder+"/"+folder+file) 

folder+file - サブフォルダとファイル名の concatenationだろう> Sub Folder 1xyz_Room.jpg

すなわち、私はそこに新しい文字列を作成しています。

出力:

Sub folder 1abc_Room.jpg Sub folder 1xyz_facade.jpg Sub folder 1xyz_Room.jpg 

同じことが、すべてのサブフォルダのために行われます。私ははっきりしていたと思う。

+0

これは、内部のサブフォルダの1つのレイヤに対して行います。 5〜10層のサブフォルダもあります。 –

+0

あなたはあなたの質問にそれを言及していたはずです – void

関連する問題