перемещение каталогов с помощью команды find

перемещение каталогов с помощью команды find

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

Исходный каталог выглядит следующим образом:

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

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

/Backup/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 в месте назначения и"./"также создает проблему.

С наилучшими пожеланиями, К.Дж.

решение1

TheСтраница Linux Manсостояния:

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]* 

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

решение2

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

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

Связанный контент