重命名文件添加其父文件夹名称

Neo*_*Neo 7 command-line scripts software-recommendation

我想用其父文件夹名称重命名文件名,在当前名称之前添加文件夹名称。

例如:

文件夹结构

SOCH NC KT 633-ROYAL BLUE-MULTI
|
| 1.jpg
|
| 2.jpg
|
| 3.jpg
Run Code Online (Sandbox Code Playgroud)

预期结果

SOCH NC KT 633-ROYAL BLUE-MULTI
|
|_SOCH NC KT 633-ROYAL BLUE-MULTI1.jpg
|
|_SOCH NC KT 633-ROYAL BLUE-MULTI2.jpg
|
|_SOCH NC KT 633-ROYAL BLUE-MULTI3.jpg

SOCH NC KT 710-BLACK-MULTI
Run Code Online (Sandbox Code Playgroud)

谁能建议如何在 .sh 文件中完成此操作?是否有任何实用程序可用于执行该操作?

Jac*_*ijm 6

在一个小的 python 脚本中,递归地重命名文件(文件夹以及子文件夹):

#!/usr/bin/env python3
import shutil
import os
import sys

dr = sys.argv[1]

for root, dirs, files in os.walk(dr):
    for f in files:
        shutil.move(root+"/"+f, root+"/"+root.split("/")[-1]+f)
Run Code Online (Sandbox Code Playgroud)

如何使用

笔记

和往常一样,先试一下样品!

解释

剧本:


des*_*ert 6

您可以通过以下方式执行此操作rename

\n\n
rename -n \'s/(.*)\\//$1\\/$1/\' */*\n
Run Code Online (Sandbox Code Playgroud)\n\n

该命令需要在您要处理的目录的正上方目录中启动。它首先只会列出更改供您检查,如果您对结果满意,则运行它而不-n执行重命名。

\n\n

运行示例

\n\n
$ tree\n.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 SOCH NC KT 633-ROYAL BLUE-MULTI\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1.jpg\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 2.jpg\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 3.jpg\n$ rename \'s/(.*)\\//$1\\/$1/\' */*\n$ tree\n.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 SOCH NC KT 633-ROYAL BLUE-MULTI\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 SOCH NC KT 633-ROYAL BLUE-MULTI1.jpg\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 SOCH NC KT 633-ROYAL BLUE-MULTI2.jpg\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 SOCH NC KT 633-ROYAL BLUE-MULTI3.jpg\n
Run Code Online (Sandbox Code Playgroud)\n\n

解释

\n\n
rename \'s/(.*)\\//$1\\/$1/\' */*\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • s/a/b/\xe2\x80\x93s替换ab
  • \n
  • (.*)\\/\xe2\x80\x93 获取所有内容,直到(不包括)最后一个斜杠将其保存为组 1 \n并将其替换为
  • \n
  • $1\\/$1\xe2\x80\x93 组 1(目录名称)、斜杠和组 1(文件名前缀)
  • \n
\n