После этих двух сообщений:
Переместите файлы в родительский каталог, снабдив префиксом имя файла прежнее имя подкаталога
рекурсивно добавьте имя каталога к имени файла
Я хотел бы сделать то же, но с копированием вместо перемещения. Так просто у меня есть каталог, содержащий подкаталоги и подподкаталоги, где существуют некоторые файлы внутри. Я хочу скопировать все файлы в другую папку назначения, но так как некоторые файлы имеют точные имена, таким образом, я хочу присоединить название родительских каталогов как префикс к именам файлов.
Я работаю на человечности 16.04
Данный
$ tree folder1
folder1
├── folder2
│ ├── folder3
│ │ ├── name1.csv
│ │ ├── name2.csv
│ │ └── name3.csv
│ ├── name1.csv
│ ├── name2.csv
│ └── name3.csv
├── name1.csv
├── name2.csv
└── name3.csv
2 directories, 9 files
затем Вы могли сделать что-то вроде этого для замены каждого разделителя пути (/
) в оригинале с _
например:
$ find folder1 -type f -exec bash -c '
for f; do echo cp -n "$f" path/to/newdir/"${f//\//_}"; done
' bash {} +
cp folder1/folder2/folder3/name2.csv path/to/newdir/folder1_folder2_folder3_name2.csv
cp folder1/folder2/folder3/name3.csv path/to/newdir/folder1_folder2_folder3_name3.csv
cp folder1/folder2/folder3/name1.csv path/to/newdir/folder1_folder2_folder3_name1.csv
cp folder1/folder2/name2.csv path/to/newdir/folder1_folder2_name2.csv
cp folder1/folder2/name3.csv path/to/newdir/folder1_folder2_name3.csv
cp folder1/folder2/name1.csv path/to/newdir/folder1_folder2_name1.csv
cp folder1/name2.csv path/to/newdir/folder1_name2.csv
cp folder1/name3.csv path/to/newdir/folder1_name3.csv
cp folder1/name1.csv path/to/newdir/folder1_name1.csv
Обратите внимание, что это не гарантирует уникальные обозначения, если исходный файл или имена папок уже будут содержать _
символ (который является, почему я включал -n
нет - ударяют переключатель - на всякий случай). Вы, конечно, свободны выбрать другое (или не) разделитель.
Удалите echo
после того как Вы удовлетворены, что это делает правильную вещь.