【发布时间】:2018-10-01 19:16:22
【问题描述】:
我正在尝试根据文件名将我的文件重组到新目录中。这是通过GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17) OS X High Sierra 完成的
目前我有一个父目录,有 2 组子目录,有 100 多个子目录,然后是一组图像,其文件名在我所拥有的 3000 个左右的文件中很常见。
So Parent(dir) -> Subcategories(dirs) -> Deeper subcategories(dirs) -> Files
文件名都非常相似,即 login.png 或 splash.png,我可能在 3000 个文件中只有 40 个唯一的文件名。然而,子类别是独一无二的。
我正在尝试将所有相同的文件名(即所有 login.png 文件)递归地复制到一个新文件夹中,但使用任意唯一标识符重命名它们。这个唯一标识符无关紧要。它可以是任意数字,甚至可以是父目录名称(即login_subdirectoryname.png)
为了获得所有可用文件的列表,我已经尝试了几件事:
所以使用这样的东西至少可以向我展示所有可用的文件:
find ./Parent -name "*.PNG" -type f -exec echo_name.sh basename {} \;
echo_name.sh 很简单:
echo_name(){
echo $1
}
echo_name $1
我创建了一个函数,因为我认为我们需要执行更多操作,例如检查新目录中存在的名为“login”的文件夹,如果不可用,则创建它。
所以我需要能够在这里完成两件事......
A) 在find 函数中维护一些唯一变量以计数,该函数将传递给echo_name.sh,因此每个文件名只需加一(即login_1.png),或 添加父目录名称(即login_thissubcategory. png)以避免在我创建实际的cp 时重复文件名
B) 确定没有扩展名和路径的严格文件名是什么,并确定路径。所以我的函数需要知道:
- ./Parent/subcategory/deeper_subcategory/login.PNG
- deeper_subcategory
- 登录
我知道这是一个复杂的重组,但感谢任何帮助。
【问题讨论】:
-
我没有看到具体的问题,而且“任何帮助”相当模糊。有什么事情没有按您的预期工作吗?
-
$1将只是单词basename,而不是文件名。你实际上并没有执行basename命令。