将父文件夹名称添加到所有.jpg(不区分大小写)文件

时间:2017-06-30 09:07:12

标签: python bash ubuntu ubuntu-16.04

我有我的目录:

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

没有。任何文件夹中的子文件夹都不是固定的,因此操作需要递归完成。

要做的是找到所有.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 个答案:

答案 0 :(得分:1)

好的,我将在 Python 中提供解决方案。假设您在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) 

上面会从这些子文件夹中获取文件并将它们存储在一个列表中,一个subfolder的输出将是,

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

最后,对于每个文件,使用os.rename(src,dest)重命名。这样做也是一样,

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

注意: folder+file - &gt; Sub Folder 1xyz_Room.jpg

即我在那里创建一个新的字符串,它是子文件夹和文件名的concatenation

输出:

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

对所有子文件夹也会这样做。希望我很清楚。

答案 1 :(得分:0)

试试这个

xargs mkdir <  Sub folder 1

答案 2 :(得分:0)

使用find命令列出所有必需的文件。并使用for循环遍历所有文件

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