2017-07-07 238 views
-3

我想通过使用文件夹名来重命名文件。将文件夹名重命名为带有bash的文件名

此:

├── foo01 
│   └── bar.png 
│   └── bar.txt 
├── foo02 
│   └── bar.png 
│   └── bar.txt 
└── foo03 
    └── bar.png 
   └── bar.txt 

应该是这样的:

├── foo01 
│   └── foo01.png 
│   └── foo01.txt 
├── foo02 
│   └── foo02.png 
│   └── foo02.txt 
└── foo03 
    └── foo03.png 
   └── foo03.txt 

我无法找到一个方法来做到这一点。任何人都可以帮忙吗?

+1

到目前为止您尝试了什么?请参阅此批量重命名:https://stackoverflow.com/questions/8416990/shell-bash-shortcut-for-bulk-renaming-of-files-in-a-folder – Lovy

+0

请显示您的代码。由于Stack Overflow隐藏了你的密切原因:*寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现它的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建一个最小化,完整和可验证的示例](https://stackoverflow.com/help/mcve)。* – jww

回答

1

随着Perl的的独立的重命名命令:

rename -n 's|([^/]*)/[^/]*\.(.*)$|$1/$1.$2|' */* 

输出:

 
foo01/bar.png renamed as foo01/foo01.png 
foo01/bar.txt renamed as foo01/foo01.txt 
foo02/bar.png renamed as foo02/foo02.png 
foo02/bar.txt renamed as foo02/foo02.txt 
foo03/bar.png renamed as foo03/foo03.png 
foo03/bar.txt renamed as foo03/foo03.txt 

如果一切正常,删除选项-n

+0

你可以解释你的正则表达式魔法... – Robert

+0

我用's | regex | string | '将路径和文件名的元素转换为新字符串。该语法与'sed''s's'命令非常相似。 – Cyrus

+0

谢谢,这有帮助。我必须使用相同的语法来重命名(而不是预先命名),并且一切正常。 200个文件被重命名:) – SillyWalker