我有一个目录结构,其中包含许多文件,这些文件的名称与以下内容相同: dir1/test dir2/test dir3/test 我想找到每个测试文件并将其复制到另一个具有唯一(任意)文件名的目录中,以便我可以分析它们包含的数据。目录结构中可能包含大量这些名称相似的文件,这些文件深达几层。我可以使用 find 来定位文件,但重命名(使用 find)对我不利。有人可以就这个问题提供指导吗?
答案1
- 源目录是您想要搜索文件的根目录形式。
- 目标目录是您要复制或移动文件的目标目录
- *.doc是要搜索的文件名或文件模式。
你可以复制使用以下命令创建文件!请注意,--backup=numbered
如果目标目录中已有同名文件,则将创建后缀为数值增加的文件。
find /source_dir -type f -name *.doc | xargs -I '{}' cp --backup=numbered {} /destination_dir
你可以移动使用以下命令创建文件!请注意,--backup=t
如果目标目录中已有同名文件,则将创建后缀为数值增加的文件。
find /source_dir -type f -name *.doc | xargs -I '{}' mv --backup=t {} /destination_dir
您还可以考虑使用这些命令须藤如果您在搜索目标中可能拥有属于其他用户的匹配文件。
--backup=numbered
如果您想要这些命令的详细输出,请在或之后添加 -v --backup=t
。
答案2
您可以将路径中的 / 替换为其他字符,并将其用作新文件名:
#!/bin/bash
for f in /dir*/*
do
cp "$f" "${f//\//.}"
done