У меня есть структура каталогов, которая содержит несколько файлов с такими же именами, как в: dir1/test dir2/test dir3/test. Я хочу найти каждый тестовый файл и скопировать его в другой каталог с уникальным (произвольным) именем файла, чтобы Я могу проанализировать данные, которые они содержат. Там может быть большое количество этих файлов с одинаковыми именами, содержащих несколько уровней глубоко в структуре каталогов. Я могу использовать find, чтобы найти файлы, но переименование (используя find) намекает на меня. Кто-нибудь может дать рекомендации по этому вопросу?
2 ответа
- source_dir - это корневая директория, в которой вы хотите искать файлы.
- destination_dir - это каталог назначения, куда вы хотите скопировать или переместить ваши файлы
- * .doc - имя вашего файла или шаблон файла для поиска.
Вы можете скопировать файлы с помощью следующей команды! обратите внимание, что --backup=numbered
создаст файл с суффиксом с увеличенным числом , если файл с таким именем уже находится в каталоге назначения.
find /source_dir -type f -name *.doc | xargs -I '{}' cp --backup=numbered {} /destination_dir
Вы можете перемещать файлы с помощью следующей команды! обратите внимание, что --backup=t
создаст файл с увеличенным числом с суффиксом, если файл с таким именем уже находится в каталоге назначения.
find /source_dir -type f -name *.doc | xargs -I '{}' mv --backup=t {} /destination_dir
Вы также можете рассмотреть возможность использования этих команд с sudo, если у вас могут быть в поиске подходящие файлы, принадлежащие другому пользователю.
Если вы хотите подробный вывод этих команд, добавьте add -v после --backup=numbered
или --backup=t
.
Вы можете заменить / в пути другим символом и использовать его в качестве нового имени файла:
#!/bin/bash
for f in /dir*/*
do
cp "$f" "${f//\//.}"
done