Рекурсивное перемещение файлов и папок в Linux

считаем:

ls -al ../public-back
drwxrwxr-x  4 apache   apache     4096 Apr 19 03:32 templates

ls -al ../public-back/templates

drwxrwxr-x  2 apache   apache    4096 Apr 19 03:33 content
drwxrwxr-x  2 apache   apache   20480 Apr 20 06:14 images
drwxrwxr-x  2 apache   apache    4096 Apr 19 03:35 video

ls -al /public

drwxrwxr-x  4 apache   apache     4096 Apr 20 09:49 templates

ls -al /public/templates

drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 content
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 images
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 video

как переместить содержимое /public-back/templates рекурсивно с разрешениями в /public/templates?

5
задан Peter Mortensen
29.12.2022 12:35 Количество просмотров материала 3525
Распечатать страницу

5 ответов

Если я неправильно вопрос, это будет работать:

mv /public-back/templates/* /public/templates

кроме того, если у вас есть огромный список файлов, добавив -i спросит, прежде чем перезаписывать что-либо, что добавляет некоторую безопасность при использовании подстановочных знаков, таких как *.

74
отвечен KennyPeanuts 2022-12-30 20:23

страница man для cp гласит:

-p same as --preserve=mode,ownership,timestamps
-r same as --recursive=copy directories recursively

попробовать;

cp -rp /public-back/templates/* /public/templates/
6
отвечен Himalay 2022-12-30 22:40

при перемещении элементов с флэш-накопителя в систему OSMC я обнаружил следующее очень полезным:

find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;

объяснение о том, как это работает ниже.

кстати, не забудьте добавить обратную косую черту перед пробелами в именах исходных или целевых каталогов (см. выше).

find  finds all files and folders in the destination path.

/media/Pi Hard 16GB/ is the path searched. Escape special char such as spaces.

-name '*' filters on names. If you do not escape or quote this then 
          the shell will expand it before find sees it.

-exec     Executes a command, in our case mv

-v        Verbose, so you can see what's happening (optional)

{}        is replaced by the name of the found object.

фактически, вы находите все файлы и все папки и перемещаете их по одному (или, если каталог будет найден первым, вы перемещаете этот каталог и содержимое в нем). Это запускает новый процесс для каждого хода и очень неэффективно. Используйте его только в случае сбоя обычных команд.

3
отвечен Pi Hard 2022-12-31 00:57

МВ не для этого. Но вы можете использовать этот маленький трюк, работает как шарм:

tar cf - . |(cd /targetdir; tar xvf -)

и сохраняет разрешения и все.

Примечание: ни один из выше работал для меня, поэтому это временное решение.

2
отвечен svye 2022-12-31 03:14
cp -a --link ../public-back/* /public/.  &&  rm -rf ../public-back

Так что создание жестких ссылок на каталог и удалить источник реж. 'mv' просто не будет работать в вашем случае, и вообще работает только тогда, когда source dir и dest не имеют общих поддеревьев.

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

0
отвечен Boudewijn 2022-12-31 05:31

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх