У меня есть структура каталогов, которая содержит несколько файлов с такими же именами, как в: dir1/test dir2/test dir3/test. Я хочу найти каждый тестовый файл и скопировать его в другой каталог с уникальным (произвольным) именем файла, чтобы Я могу проанализировать данные, которые они содержат. Там может быть большое количество этих файлов с одинаковыми именами, содержащих несколько уровней глубоко в структуре каталогов. Я могу использовать find, чтобы найти файлы, но переименование (используя find) намекает на меня. Кто-нибудь может дать рекомендации по этому вопросу?

2 ответа2

1
  • 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 .

0

Вы можете заменить / в пути другим символом и использовать его в качестве нового имени файла:

#!/bin/bash
for f in /dir*/*
do
    cp "$f" "${f//\//.}"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .