Cp

複製和重命名文件

  • November 10, 2019

我的文件結構如下:

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’

我怎樣才能達到我的目標?

提前致謝。

鑑於您的方案,並假設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]

排序、提取或分析特定類型或名稱的文件,或從給定的年份、月份或日期等等將是一件非常簡單的事情。

引用自:https://unix.stackexchange.com/questions/551328