复制并重命名文件

复制并重命名文件

我的文件结构如下:

My_Files:
        |-- Folder_1: 
        |           |-- a.txt
        |           |-- b.txt
        |           |-- c.txt
        |
        |-- Folder_2:
                    |-- a.txt
                    |-- b.txt

我有大约 200 个这样的文件夹。

我想要的是:

我想复制我的文件并将同名文件重命名到一个文件夹中,如下所示:

Final_Folder: 
            |-- a.txt
            |-- b.txt
            |-- c.txt
            |-- a1.txt (Renamed)
            |-- b1.txt (Renamed)

我做了什么:

我使用了这个命令,但没有找到结果:

find My_Files/ -type f -print0 | xargs -0 cp -t Final_Folder/

输出如下:

cp:不会用“Final_Folder/a.txt”覆盖刚刚创建的“Folder_1/a.txt”

cp:不会用“Final_Folder/b.txt”覆盖刚刚创建的“Folder_1/b.txt”

cp:不会用“Final_Folder/c.txt”覆盖刚刚创建的“Folder_1/c.txt”

cp:不会用“Final_Folder/a.txt”覆盖刚刚创建的“Folder_2/a.txt”

cp:不会用“Final_Folder/b.txt”覆盖刚刚创建的“Folder_2/b.txt”

我怎样才能达到我的目标?

提前致谢。

答案1

考虑到您的方案,并假设Folder 1, Folder 2, Folder 3 etc.实际上确实具有某种意义(否则您可以将当前时间戳附加到您必须避免出现问题的每个文件名),我将使用以下命令(确保该文件夹Final_Folder事先存在):


find . -path ./Final_Folder -prune -o -type f -exec sh -c 'fn=$(basename -- {}) ; suffix=$(dirname {} | tr / _  ) ; cp {} ./Final_Folder/${fn%.*}$suffix.${fn##*.};   ' \;


文件命名方案将遵循这样的方案:

[basename filename]._[basepath folder 1]_[basepath folder2]_[basepath folder[3..n].[extension]

或者换句话说,Final_Folder 内容将是:

a._Folder_1.txt
a._Folder_2.txt
a._Folder_3.txt
b._Folder_1.txt
b._Folder_2.txt
b._Folder_3.txt
c._Folder_1.txt
c._Folder_2.txt
c._Folder_3.txt

这个方案的好处是,如果您的层次结构类似于:

[YEAR]/[MONTH]/[DAY]/[filename a,b,c].txt

就像数据收集时经常做的那样

如果您从顶级目录运行上述命令,您今天复制到的文件名将Final_Folder被命名为:”

a._2019_11_10.txt
b._2019_11_10.txt
c._2019_11_10.txt
.
.
.
[a,b,c]._2019_11_10.[WITH OTHER EXTENSIONS]

对特定类型、名称或特定年份、月份或日期等的文件进行排序、提取或分析将是一件非常简单的事情。

相关内容