Я пытаюсь найти конкретный каталог по одному пути и переместить каталог по другому пути с помощью команды find.

Исходный каталог выглядит как ниже,

/Dir1/country1/month1/date1,date2,date3
/Dir1/country2/month1/date1,date2,date3
...
.
.
/Dir1/country10/month1/date1,date2,date3

Я пытаюсь найти каталог date1 и перейти к месту назначения

/ Резервное копирование / source1 / Dir1 /

Я использую приведенную ниже команду

[root @ mytest Dir1] # find -name "date1" -exec mv {} /Backup /source1 /Dir1 /{} \;

и я получаю ошибку ниже.

mv: не удалось сохранить владение для `/Backup/source1/Dir1/./country1/month1/date1/date1/date1_1.txt ': операция не разрешена

Не уверен, как удалить дублирование каталога date1 в месте назначения и "./" также создает проблему.

С наилучшими пожеланиями, KJ

2 ответа2

0

Страница руководства Linux гласит:

mv - перемещать (переименовывать) файлы

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

   SRC_DIR=$(find . -type d -name date1 -print); echo $SRC_DIR

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

   mkdir /Backup/source1/$SRC_DIR

при условии, что у вас есть для этого полномочия: на самом деле вышеприведенное сообщение об ошибке означает, что у вас недостаточно прав для создания нового файла (это должна была быть папка, но она стала файлом из-за указанной выше ошибки). Вы уверены, что новый /Backup /dir1 принадлежит вам? Вы должны это проверить и исправить.

Теперь вы можете рекурсивно скопировать весь контент в новый каталог:

   cp -R $SRC_DIR/* /Backup/dir1/$SRC_DIR
   cp -R $SRC_DIR/.[a-Z]* /Backup/dir1/$SRC_DIR

и, наконец, вы можете стереть старую копию, если вам необходимо:

   cd $SRC_DIR
   rm -fR *
   rm -fR .[a-Z]* 

и теперь каталог пуст и может быть удален.

0

Вместо того, чтобы использовать move, который является инструментом Blunt, проверьте rsync, который может смещать деревья каталогов в режиме архива, который сохраняет разрешения и мягкие и жесткие символьные ссылки.

Также, если вы updatedb качестве пользователя root, он обновит базу данных locate файлов, которые находятся в разных деревьях путей установленных пакетов. Двоичные файлы, справочные страницы и исходные деревья. Поиск с помощью whereis или locate выполняется намного быстрее, чем поиск по диску каждый раз.

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