複製並重新命名檔案新增動態前綴/後綴

複製並重新命名檔案新增動態前綴/後綴

我需要複製一些像這樣的文件:

folder1/name1.csv
folder1/name2.csv
folder2/name1.csv
folder2/name2.csv
folder3/name1.csv
folder3/name2.csv

所有資料夾*都是目錄的子目錄。我想要做的是將所有檔案“name*”複製到新目錄new_dir中,但我必須更改它們的名稱。尋求幫助我嘗試過

find . -name 'name*.csv' -exec cp --backup=t '{}' new_dir/ \;

但我得到「cp: './new_dir/name1.csv' e './new_dir/name1.csv' 是同一個檔案」。

如何向名稱添加前綴或後綴以便可以複製它們?加一個整數就可以了,這樣在 new_dir 檔案中會如下所示:

new_dir/name10.csv
new_dir/name21.csv
new_dir/name12.csv
new_dir/name23.csv
new_dir/name14.csv
new_dir/name25.csv
...

或者,更好的是,如果我可以重命名該文件,添加複製它們的文件夾的名稱,如下所示:

new_dir/name1folder1.csv
new_dir/name2folder1.csv
new_dir/name1folder2.csv
new_dir/name2folder2.csv
new_dir/name1folder3.csv
new_dir/name2folder3.csv
...

在此先感謝您。

答案1

給定

$ tree folder*
folder1
├── name1.csv
├── name2.csv
└── name3.csv
folder2
├── name1.csv
├── name2.csv
└── name3.csv
folder3
├── name1.csv
├── name2.csv
└── name3.csv

0 directories, 9 files

然後使用帶有參數擴展的 shell 循環來對名稱進行切片和切塊

$ for f in folder*/name*.csv; do 
    b="${f##*/}"; 
    echo cp "$f" new_dir/"${b%.csv}${f%/*}.csv"
  done
cp folder1/name1.csv new_dir/name1folder1.csv
cp folder1/name2.csv new_dir/name2folder1.csv
cp folder1/name3.csv new_dir/name3folder1.csv
cp folder2/name1.csv new_dir/name1folder2.csv
cp folder2/name2.csv new_dir/name2folder2.csv
cp folder2/name3.csv new_dir/name3folder2.csv
cp folder3/name1.csv new_dir/name1folder3.csv
cp folder3/name2.csv new_dir/name2folder3.csv
cp folder3/name3.csv new_dir/name3folder3.csv

相關內容