我需要复制一些像这样的文件:
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