Скопируйте все файлы с подкаталогов и подподкаталогов к основному каталогу с изменением имен файлов путем добавления префикса всех родительских каталогов

После этих двух сообщений:

Переместите файлы в родительский каталог, снабдив префиксом имя файла прежнее имя подкаталога

рекурсивно добавьте имя каталога к имени файла

Я хотел бы сделать то же, но с копированием вместо перемещения. Так просто у меня есть каталог, содержащий подкаталоги и подподкаталоги, где существуют некоторые файлы внутри. Я хочу скопировать все файлы в другую папку назначения, но так как некоторые файлы имеют точные имена, таким образом, я хочу присоединить название родительских каталогов как префикс к именам файлов.

Я работаю на человечности 16.04

0
задан 28 November 2019 в 15:04

1 ответ

Данный

$ 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 после того как Вы удовлетворены, что это делает правильную вещь.

1
ответ дан 21 December 2019 в 23:47

Другие вопросы по тегам:

Похожие вопросы: