다음과 같은 일부 파일을 복사해야 합니다.
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
그런 다음 매개변수 확장이 포함된 쉘 루프를 사용하여 이름을 쪼개고 쪼개세요.
$ 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