Назначение cp -x (остаться в файловой системе)?

25

Если бы я хотел остаться в той же файловой системе, не мог бы я просто указать путь вывода для той же файловой системы?

Или это для предотвращения случайного ухода из текущей файловой системы?

neverMind9
источник
1
-x в другом контексте: unix.stackexchange.com/a/358331/30851, но то же самое для cp: -x пропускает вещи, если вы переносите файловые системы и хотите, чтобы это была полная копия, рассмотрите возможность монтирования таким образом, чтобы Вы полная картина.
frostschutz
1
Вы можете спросить то же самое о многих флагах, например -i: «почему бы просто не указать пункт назначения, который не существует»?
JigglyNaga
1
@JigglyNaga Я тоже так думал. Но -x не был хорошо сформулирован в документации и гораздо менее очевиден.
neverMind9

Ответы:

59

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

cp -xr / blah

будет копировать только корневую файловую систему, а не любые другие монтируемые файловые системы.

Смотрите в cp -xдокументации (хотя его различие является тонким).

Стивен Китт
источник
3
О да, вы можете не захотеть копировать сетевые ресурсы в / mnt. Ни удаленного хранилища RCS, установленного под вашим домашним диском.
Маккензм
1
@mckenzm Кроме того, потому что /mntэто только человеческое соглашение, иногда приводимое в действие установкой дистрибутива, но не требование ОС. У меня иногда /var/somewebsite/www/sessions
подключаются
Действительно, этот тип флага предотвращает случайное копирование огромных общих сетевых ресурсов или съемных носителей, которые вы забыли, когда смонтировали. И вам не нужно давать --excludeопции, чтобы вручную заблокировать каждый из них. Очень полезно с rsync.
Ласси
3
Это также позволяет избежать копирования файловых систем, таких как /dev, /procи /sysт. Д., Которые вы обычно не хотите читать «массово».
Стивен Китт
28

-xФлаг cpявляется расширением GNU. При копировании одного файла этот параметр не будет действовать, но при копировании всей файловой иерархии этот -xпараметр предотвращает копирование файлов и каталогов, которые не находятся в той же файловой системе, что и исходный источник.

Например, в файловой системе с точками монтирования /usrи /usr/local, использование cp -xR /usr /some-destне будет копировать иерархию в /usr/local.

Есть и другие утилиты с -xопцией с аналогичной семантикой, например, duи find(флаг называется -xdevдля find), и rsync.

Кусалананда
источник