![перемещение каталогов с помощью команды find](https://rvso.com/image/1388759/%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%20find.png)
Я пытаюсь найти определенный каталог по одному пути и переместить его по другому пути с помощью 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
намного быстрее, чем выполнение фактического поиска на диске каждый раз.